java.time
MadProgrammer的答案是正确的,尤其是关于Joda-Time的提示。Joda-Time 的继任者现在作为新的java.time 包内置到Java 8中。这是 Java 8 中的示例代码。
使用日期时间(而不是本地日期)时,时区至关重要。日期取决于时区。例如,印度时区(+05:30
比 UTC 提前五个半小时),而法国仅提前一个小时。因此,在印度新一天的某个时刻有一个日期,而在法国的同一时刻有一个“昨天”的日期。创建缺少任何时区或偏移信息的字符串输出会造成歧义。你要求 YYYY-MM-DD 输出,所以我提供了,但我不推荐它。而不是ISO_LOCAL_DATE
我本来可以ISO_DATE
得到这个输出:2014-02-25+05:30
ZoneId zoneId = ZoneId.of( "Asia/Kolkata" );
ZonedDateTime zonedDateTime = ZonedDateTime.now( zoneId );
DateTimeFormatter formatterOutput = DateTimeFormatter.ISO_LOCAL_DATE; // Caution: The "LOCAL" part means we are losing time zone information, creating ambiguity.
String output = formatterOutput.format( zonedDateTime );
转储到控制台...</p>
System.out.println( "zonedDateTime: " + zonedDateTime );
System.out.println( "output: " + output );
运行时……</p>
zonedDateTime: 2014-02-25T14:22:20.919+05:30[Asia/Kolkata]
output: 2014-02-25
乔达时间
使用 Java.time 的前身Joda-Time库的类似代码。
DateTimeZone zone = new DateTimeZone( "Asia/Kolkata" );
DateTime dateTime = DateTime.now( zone );
DateTimeFormatter formatter = ISODateTimeFormat.date();
String output = formatter.print( dateTime );
ISO 8601
顺便说一句,输入字符串的格式是标准格式,是ISO 8601定义的几种方便的日期时间字符串格式之一。
在解析和生成各种日期时间值的字符串表示时,Joda-Time 和 java.time 默认使用 ISO 8601 格式。