我需要格式字符串,格式如下: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
我查看了文档,似乎无法找到正确的格式化字符串。
答案 0 :(得分:2)
这是因为格式化程序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
明确告知new DateTime(DateTimeZone.UTC)
构造函数使用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);
这将格式化日期accinlgy(没有毫秒):
2017-06-14T00:00:00Z
答案 1 :(得分:1)
您可以尝试使用parseDateTime函数
DateTimeFormatter f = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ssZ");
DateTime dateTime = f.parseDateTime("2017-06-14T00:00:00Z");
希望它会有所帮助。
答案 2 :(得分:1)
" Z"格式为RFC 822时区
对于格式化,如果GMT的偏移值为0,则" Z"被生产。如果 模式字母的数量是1,一小时的任何一小部分 忽略。
用于解析," Z"被解析为UTC时区指示符。一般 时区不被接受。
如果你想获得UTC的字符串 - 你应该强制时区:
DateTime dateTime = new DateTime(DateTimeZone.UTC);
String strNow = dateTime.toString(DT_SCHEDULE_FORMATTER_START_TIME);