【发布时间】:2016-02-12 16:31:52
【问题描述】:
我的团队希望从 Joda time 切换到 java.time,但我们发现使用相同模式进行格式化时会出现不同的行为。当我们使用星期几w 符号时,就会出现问题:
final String dateString = "2016-01-04 00:00:00";
final String inputPattern = "yyyy-MM-dd HH:mm:ss";
// parse the input string using Joda
final org.joda.time.format.DateTimeFormatter jodaInputFormatter = org.joda.time.format.DateTimeFormat.forPattern(inputPattern);
final org.joda.time.DateTime jodaDateTime = jodaInputFormatter.parseDateTime(dateString);
// parse the input string using two different java.time classes
final java.time.format.DateTimeFormatter javaTimeInputFormatter = java.time.format.DateTimeFormatter.ofPattern(inputPattern).withZone(java.time.ZoneOffset.UTC);
final java.time.LocalDateTime localDateTime = java.time.LocalDateTime.parse(dateString, javaTimeInputFormatter);
final java.time.ZonedDateTime zonedDateTime = java.time.ZonedDateTime.parse(dateString, javaTimeInputFormatter);
final String outputPattern = "'week' w - dd/MM/yyyy HH:mm:ss";
final org.joda.time.format.DateTimeFormatter jodaOutputFormatter = org.joda.time.format.DateTimeFormat.forPattern(outputPattern);
final java.time.format.DateTimeFormatter javaTimeOutputFormatter = java.time.format.DateTimeFormatter.ofPattern(outputPattern);
// output: week 1 - 04/01/2016 00:00:00
System.out.println("With joda: " + jodaOutputFormatter.print(jodaDateTime));
// output: week 2 - 04/01/2016 00:00:00
System.out.println("With LocalDateTime: " + javaTimeOutputFormatter.format(localDateTime));
// output: week 2 - 04/01/2016 00:00:00
System.out.println("With ZonedDateTime: " + javaTimeOutputFormatter.format(zonedDateTime));
由于某种原因,w 符号的输出在两个实现中相差一倍。
是什么导致了这种不一致? w 符号是否在 Joda 时间和 java.time 之间不一致地实现?
【问题讨论】:
-
您的默认系统区域设置是什么?
-
我位于美国东部标准时间 (UTC−05:00),但由于
.withZone(java.time.ZoneOffset.UTC)呼叫不应该不相关吗? -
我不想知道您的系统时区,而是您的系统区域设置!此类周字段取决于区域设置。
标签: java jodatime date-format date-formatting java-time