Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 我正在尝试获取joda time中日期字符串的DateTimeFormatter_Android_Jodatime_Datetime Format - Fatal编程技术网

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的解决方案。