我想在日期字符串中得到DateTimeFormatter约达时间
我需要格式化字符串格式为这样的日期:2017-06-14T00:00:00Z
。我想在日期字符串中得到DateTimeFormatter约达时间
目前,我有:
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和格式化程序prints the timezone offset中的Z
模式。
系统的默认时区偏移量为-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,使用new DateTime(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
你可以尝试使用parseDateTime功能
DateTimeFormatter f = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ssZ");
DateTime dateTime = f.parseDateTime("2017-06-14T00:00:00Z");
希望这将有助于。
“Z” 在格式是RFC 822时区
对于格式化,如果偏移VALU来自格林威治标准时间的是0,产生“Z”。如果 模式字母的数量是1,则任何一小时的小数部分都会被忽略 。
对于解析,“Z”被解析为UTC时区指示符。一般 时区不被接受。
如果你想获得UTC字符串 - 你应该强制时区:
DateTime dateTime = new DateTime(DateTimeZone.UTC);
String strNow = dateTime.toString(DT_SCHEDULE_FORMATTER_START_TIME);