如何将日期字符串转换为日期或日历对象?tl;博士java.timeLocalDate国际标准化组织 ISO 8601格式化程序

2022-08-31 15:31:43

我有一个日期的表示形式,我需要从中创建一个 或 对象。我已经查看了API和API,但除了创建我自己丑陋的解析方法之外,没有找到任何可以做到这一点的东西。我知道一定有办法,有人知道解决方案吗?StringDateCalendarDateCalendar


答案 1

简言之:

DateFormat formatter = new SimpleDateFormat("MM/dd/yy");
try {
  Date date = formatter.parse("01/29/02");
} catch (ParseException e) {
  e.printStackTrace();
}

请参阅 SimpleDateFormat javadoc 了解更多信息。

要将其转换为 ,请执行以下操作:Calendar

Calendar calendar = Calendar.getInstance();
calendar.setTime(date);

答案 2

tl;博士

LocalDate.parse( "2015-01-02" )

java.time

Java 8及更高版本有一个新的java.time框架,使这些其他答案过时了。该框架的灵感来自Joda-Time,由JSR 310定义,并由ThreeTen-Extra项目扩展。请参阅教程

旧的捆绑类,java.util.Date/。日历,是出了名的麻烦和混乱。避免它们。

LocalDate

与Joda-Time一样,java.time有一个类LocalDate来表示一个仅日期的值,没有时间,也没有时区。

国际标准化组织 ISO 8601

如果输入字符串采用 的标准 ISO 8601 格式,则可以要求该类直接解析字符串,而无需指定格式化程序。yyyy-MM-dd

默认情况下,ISO 8601 格式在 java.time 中使用,用于解析和生成日期时间值的字符串表示形式。

LocalDate localDate = LocalDate.parse( "2015-01-02" );

格式化程序

如果您有其他格式,请从 java.time.format 包中指定格式化程序。您可以指定自己的格式设置模式,也可以让 java.time 根据指定用于翻译的人类语言和用于决定句点与逗号等问题的文化规范进行自动本地化。Locale

格式设置模式

阅读 DateTimeFormatter 类文档,了解有关格式模式中使用的代码的详细信息。它们与旧的过时的阶级模式略有不同。java.text.SimpleDateFormat

请注意,该方法的第二个参数是方法引用,语法添加到 Java 8 及更高版本中。parse

String input = "January 2, 2015";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ( "MMMM d, yyyy" , Locale.US );
LocalDate localDate = LocalDate.parse ( input , formatter );

转储到控制台。

System.out.println ( "localDate: " + localDate );

本地日期: 2015-01-02

自动本地化

或者,与其指定格式设置模式,不如让 java.time 为您本地化。调用 ,并确保指定所需的/预期的,而不是依赖于 JVM 的当前默认值,该默认值在运行时(!DateTimeFormatter.ofLocalizedDateLocale

String input = "January 2, 2015";
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDate ( FormatStyle.LONG );
formatter = formatter.withLocale ( Locale.US );
LocalDate localDate = LocalDate.parse ( input , formatter );

转储到控制台。

System.out.println ( "input: " + input + " | localDate: " + localDate );

输入: 2015年1月2日 |本地日期: 2015-01-02