有没有一种简单的方法来解析可能是MM/DD/yyyy,或者M/D/yyyy,或者某种组合的日期?即,在一位数日或月之前,零是可选的。
要手动完成此操作,可以使用以下命令:
String[] dateFields = dateString.split("/");
int month = Integer.parseInt(dateFields[0]);
int day = Integer.parseInt(dateFields[1]);
int year = Integer.parseInt(dateFields[2]);并通过以下方式验证:
dateString.matches("\\d\\d?/\\d\\d?/\\d\\d\\d\\d")有没有调用SimpleDateFormat或JodaTime来处理这个问题?
发布于 2008-10-23 02:35:26
看起来我的问题是使用"MM/dd/yyyy“,而我应该使用"MM/DD/yyyy”。大写的D是"Day in year",而小写的d是"Day in month“。
new SimpleDateFormat("MM/dd/yyyy").parse(dateString);就能完成这项工作。此外,"M/d/y“可以互换工作。仔细阅读SimpleDateFormat API Docs会发现以下几点:
在解析时,将忽略模式字母的数量,除非需要分隔两个相邻字段。
发布于 2008-10-22 21:31:25
是的,使用setLenient:
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"));发布于 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即可。
在此示例代码中,请注意输入字符串的月份数字如何具有填充零,而月份的日期数字则没有。两者都由单字符模式处理。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ( "M/d/yyyy" );
LocalDate localDate = formatter.parse ( "01/2/2015" , LocalDate :: from );转储到控制台。
System.out.println ( "localDate: " + localDate );localDate: 2015-01-02
https://stackoverflow.com/questions/227608
复制相似问题