我需要格式如下的日期格式字符串:2017-06-14T00:00:00Z
。
目前,我有:
DateTimeFormatter DT_SCHEDULE_FORMATTER_START_TIME = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ssZ");
如果我用这个解析字符串 2017-06-14T00:00:00Z
,它会给我正确的 UTC 时间。
但是当我获取一个 DateTime
对象并尝试执行以下操作时:
String strNow = new DateTime().toString(DT_SCHEDULE_FORMATTER_START_TIME);
我得到类似 2017-06-14T00:00:00 -07:00
我查看了文档,但似乎找不到正确的格式字符串。
最佳答案
那是因为 DateTime()
constructor uses your system's default timezone ,以及格式器中的 Z
模式 prints the timezone offset .
您系统的默认时区偏移量是 -07:00
,这就是您获得此输出的原因。
如果您最终想要的是 Z
的输出,您必须将 DateTime
对象转换为 org.joda.time.Instant
:
String strNow = new DateTime("2017-06-14T00:00:00Z").toInstant().toString();
strNow
将是 2017-06-14T00:00:00.000Z
。
如果你想获得 UTC 的当前时间(而不是解析 String
),你必须明确地告诉 DateTime
构造函数使用 UTC,使用 新的日期时间(DateTimeZone.UTC)
。
上面的代码还打印了毫秒数。如果您不想这样做,另一种选择是使用 DateTimeFormatterBuilder
:
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendPattern("yyyy-MM-dd'T'HH:mm:ss")
// append Z if offset is zero (UTC)
.appendTimeZoneOffset("Z", true, 2, 2)
// create formatter
.toFormatter();
String strNow = new DateTime("2017-06-14T00:00:00Z").toInstant().toString(formatter);
这将格式化日期 accordinlgy(没有毫秒):
2017-06-14T00:00:00Z
关于android - 我正在尝试获取 joda 时间中日期字符串的 DateTimeFormatter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44971921/