首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >日期时间解析,接受5/05/1999和5/5/1999等

日期时间解析,接受5/05/1999和5/5/1999等
EN

Stack Overflow用户
提问于 2008-10-22 21:26:11
回答 3查看 2.8K关注 0票数 4

有没有一种简单的方法来解析可能是MM/DD/yyyy,或者M/D/yyyy,或者某种组合的日期?即,在一位数日或月之前,零是可选的。

要手动完成此操作,可以使用以下命令:

代码语言:javascript
复制
String[] dateFields = dateString.split("/");
int month = Integer.parseInt(dateFields[0]);
int day = Integer.parseInt(dateFields[1]);
int year = Integer.parseInt(dateFields[2]);

并通过以下方式验证:

代码语言:javascript
复制
dateString.matches("\\d\\d?/\\d\\d?/\\d\\d\\d\\d")

有没有调用SimpleDateFormat或JodaTime来处理这个问题?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2008-10-23 02:35:26

看起来我的问题是使用"MM/dd/yyyy“,而我应该使用"MM/DD/yyyy”。大写的D是"Day in year",而小写的d是"Day in month“。

代码语言:javascript
复制
new SimpleDateFormat("MM/dd/yyyy").parse(dateString);

就能完成这项工作。此外,"M/d/y“可以互换工作。仔细阅读SimpleDateFormat API Docs会发现以下几点:

在解析时,将忽略模式字母的数量,除非需要分隔两个相邻字段。

票数 1
EN

Stack Overflow用户

发布于 2008-10-22 21:31:25

是的,使用setLenient:

代码语言:javascript
复制
DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
df.setLenient(true);
System.out.println(df.parse("05/05/1999"));
System.out.println(df.parse("5/5/1999"));
票数 11
EN

Stack Overflow用户

发布于 2015-10-29 12:12:21

java.time

Java8及更高版本包含java.time框架。这个框架废弃了其他答案中讨论的旧java.util.Date/.Calendar类。

java.time.format包及其java.time.format.DateTimeFormatter类使用的模式代码类似于Ray Myers在accepted Answer中看到的模式代码。虽然相似,但它们略有不同。特别是,他们对重复字符的数量有严格的要求。如果你说MM,那么月份必须填上零,否则你会得到一个DateTimeParseException。如果月份数字可能有也可能没有填充零,只需使用单字符M即可。

在此示例代码中,请注意输入字符串的月份数字如何具有填充零,而月份的日期数字则没有。两者都由单字符模式处理。

代码语言:javascript
复制
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ( "M/d/yyyy" );
LocalDate localDate = formatter.parse ( "01/2/2015" , LocalDate :: from );

转储到控制台。

代码语言:javascript
复制
System.out.println ( "localDate: " + localDate );

localDate: 2015-01-02

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/227608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档