android - 我正在尝试获取 joda 时间中日期字符串的 DateTimeFormatter

标签 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 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/

相关文章:

android - 无法按标题搜索Android应用-仅按包名称搜索

java - 使用两个 LocalDateTime 实例计算持续时间

java - 格式化 XML 的日期以包含 UTC 偏移量

java - 如何检查我们现在是否位于两个日期时间对象之间?

java - Joda 时间从 dateTime 获取正确的时间

javascript - JSON 日期时间的 TryParseExact 格式化程序是什么?

python - `datetime.strftime` 和 `datetime.strptime` 对 %Y 的解释不同

java - 唯一地将 Android 应用程序连接到 PC 上的 Java 小程序

c# - 从 Play 商店 xamarin 获取最新的应用程序版本

java - android加载库失败