Android 我正在尝试获取joda time中日期字符串的DateTimeFormatter
我需要格式如下的日期的格式字符串:Android 我正在尝试获取joda time中日期字符串的DateTimeFormatter,android,jodatime,datetime-format,Android,Jodatime,Datetime Format,我需要格式如下的日期的格式字符串: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 Dat
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的信息
我查看了文档,似乎找不到正确的格式字符串。您可以尝试使用parseDateTime函数
DateTimeFormatter f = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ssZ");
DateTime dateTime = f.parseDateTime("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
模式
您的系统的默认时区偏移量是-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获取当前时间(而不是解析字符串
),则必须明确告诉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);
这将按顺序格式化日期(不含毫秒):
2017-06-14T00:00:00Z
这是因为,和格式化程序中的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获取当前时间(而不是解析字符串
),则必须明确告诉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);
这将按顺序格式化日期(不含毫秒):
2017-06-14T00:00:00Z
格式中的“Z”是RFC 822时区
对于格式化,如果GMT的偏移值为0,则生成“Z”。如果
图案字母的数量是1,任何一小时的分数都是1
忽略
对于解析,“Z”被解析为UTC时区指示符。一般的
不接受时区
如果要获取UTC的字符串-应强制时区:
DateTime dateTime = new DateTime(DateTimeZone.UTC);
String strNow = dateTime.toString(DT_SCHEDULE_FORMATTER_START_TIME);
格式中的“Z”是RFC 822时区
对于格式化,如果GMT的偏移值为0,则生成“Z”。如果
图案字母的数量是1,任何一小时的分数都是1
忽略
对于解析,“Z”被解析为UTC时区指示符。一般的
不接受时区
如果要获取UTC的字符串-应强制时区:
DateTime dateTime = new DateTime(DateTimeZone.UTC);
String strNow = dateTime.toString(DT_SCHEDULE_FORMATTER_START_TIME);
对于本页面的未来访问者:检查使用现代日期时间API的解决方案。对于本页面的未来访问者:检查使用现代日期时间API的解决方案。