如何使用时区从JodaTime获得时间

布雷修

我在Jodatime和Android上遇到奇怪的行为。我想解析字符串:

2014-05-19T18:13:00.000+02:00

到DateTime,并获取年,月,小时为整型。我首先在IntelliJ Studio上进行了一些测试,然后执行了以下操作:

String date = "2014-05-19T18:13:00.000+02:00";
DateTime dateTime = new DateTime(date);
System.out.println(dateTime.toString());
System.out.println(dateTime.getYear());
System.out.println(dateTime.getMonthOfYear());
System.out.println(dateTime.getDayOfMonth());
System.out.println(dateTime.getHourOfDay());
System.out.println(dateTime.getMinuteOfHour());
System.out.println(dateTime.getMillis());

这给了我正确答案:

2014-05-19T18:13:00.000+02:00
2014
5
19
18
13
1400515980000

现在,当我将IDE更改为Android Studio并执行相同操作时:

String dateT = "2014-05-19T18:13:00.000+02:00";
DateTime dateTime = new DateTime(dateT);
Lo.g(dateTime.getHourOfDay() + "");
Lo.g(dateTime.toString());

我的结果是:

16
2014-05-19T16:13:00.000Z

由于某些原因,Android Studio / Android上的DateTime并未考虑时区+2:00。

我找不到解决方案。在Joda中也没有简单的方法“ addTimeZone”。

如何使用DataTime显示正确的时间?我尝试了LocalDateTime,用DateTimeZone.getDefault()构造DateTime(这给了我UTF ...)

梅诺·霍奇希尔德(Meno Hochschild)

由于您说过在两个平台上都使用相同的Joda-Time版本,并且考虑到Joda-Time拥有自己的时区存储库而与系统时区数据无关的事实,因此可能只剩下一个解释,为什么您观察到不同的行为:要么输入不同显性的或隐性的让我们详细介绍一下:

好吧,你说,显然,在相同的输入字符串下,会有相同的输入:

“ 2014-05-19T18:13:00.000 + 02:00”

因此,我们有相同的(明确的)输入。但是,等等,还有另一件事:隐式默认设置,它也可以抽象地视为一种输入。您使用构造函数DateTime(Object)BaseDateTime如您在源代码中所见,此构造函数首先将委托给类的超级构造函数

public DateTime(Object instant) {        
  super(instant, (Chronology) null);    
}

这个超级构造函数javadoc说:

“使用指定的时间顺序从表示日期时间的对象构造一个实例。如果时间顺序为null,则使用默认时区中的ISO。

可识别的对象类型在ConverterManager中定义,包括ReadableInstant,String,Calendar和Date。”

所以最后我们看到Joda-Time使用默认时区。通过研究源代码和文档,这确实是发生不同行为的唯一可能性。其他所有条件都相同:库版本相同,显式字符串输入相同,测试场景相同。

结论:您的平台上具有不同的默认时区。请注意,但是,由于-object内的内部时区/偏移设置不同,因此在两个平台上都具有相同的瞬间,只是以不同的本地时间戳和偏移量表示DateTime

更新:我已经使用以下代码测试了区域覆盖行为:

String date = "2014-05-19T19:13:00.000+03:00"; // same instant as yours (just with offset +03)
DateTime dateTime = new DateTime(date);
System.out.println(dateTime.toString());
// output: 2014-05-19T18:13:00.000+02:00 (in my default timezone Europe/Berlin)

因此,默认时区优先于字符串输入中的任何偏移量。如果您想使用解析后的偏移量,请查看使用DateTimeFormatter及其方法withOffsetParsed()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用Moment JS获得时间

来自分类Dev

C - 如何在 C 中使用结构获得时间

来自分类Dev

如何使用时区设置时间?

来自分类Dev

如何在Python中获得时间

来自分类Dev

如何获得时差对象的时区偏移量?

来自分类Dev

如何获得时间序列中间隔的结束时间?

来自分类常见问题

如何使用时区信息在MySQL中存储日期时间

来自分类Dev

自从使用YouTube iframe API开始播放视频以来,如何获得时间?

来自分类Dev

如何在ClojureScript中获得时间戳?

来自分类Dev

如何使应用程序自动获得时间?

来自分类Dev

Java:如何获得时间戳中的毫秒数

来自分类Dev

如何以毫秒为单位获得时间跨度

来自分类Dev

如何使用HttpClient类C#获得时间到第一个字节

来自分类Dev

如何在熊猫中使用时区将Unix纪元时间转换为日期时间

来自分类Dev

如何按日期分组并获得时间/如何获得记录Oracle的首次出现

来自分类Dev

使用时区将时间解析为日期时间

来自分类Dev

如何在不同的时区获得本地时间?

来自分类Dev

当熊猫的时间增量指数不规则时,如何获得时间序列值的每日差异?

来自分类Dev

如何在UTC中获得时间戳但没有时间?

来自分类Dev

厨师:如何在*收敛*而不是*编译*时间获得时间戳

来自分类Dev

如何在IE11中使用时区制作时间字符串

来自分类Dev

如何在Ruby中使用时区将时间戳转换为秒

来自分类Dev

如何在python中使用时区最好地调整时间戳?

来自分类Dev

如何在IE11中使用时区制作时间字符串

来自分类Dev

如何在mysql中使用时区将纪元时间转换为标准格式

来自分类Dev

Javascript RegExp Replace获得时间

来自分类Dev

在PostgreSQL中获得时间戳的年份

来自分类Dev

在PostgreSQL中获得时间戳记的年份

来自分类Dev

Bootstrap Datetimepicker获得时间部分

Related 相关文章

  1. 1

    如何使用Moment JS获得时间

  2. 2

    C - 如何在 C 中使用结构获得时间

  3. 3

    如何使用时区设置时间?

  4. 4

    如何在Python中获得时间

  5. 5

    如何获得时差对象的时区偏移量?

  6. 6

    如何获得时间序列中间隔的结束时间?

  7. 7

    如何使用时区信息在MySQL中存储日期时间

  8. 8

    自从使用YouTube iframe API开始播放视频以来,如何获得时间?

  9. 9

    如何在ClojureScript中获得时间戳?

  10. 10

    如何使应用程序自动获得时间?

  11. 11

    Java:如何获得时间戳中的毫秒数

  12. 12

    如何以毫秒为单位获得时间跨度

  13. 13

    如何使用HttpClient类C#获得时间到第一个字节

  14. 14

    如何在熊猫中使用时区将Unix纪元时间转换为日期时间

  15. 15

    如何按日期分组并获得时间/如何获得记录Oracle的首次出现

  16. 16

    使用时区将时间解析为日期时间

  17. 17

    如何在不同的时区获得本地时间?

  18. 18

    当熊猫的时间增量指数不规则时,如何获得时间序列值的每日差异?

  19. 19

    如何在UTC中获得时间戳但没有时间?

  20. 20

    厨师:如何在*收敛*而不是*编译*时间获得时间戳

  21. 21

    如何在IE11中使用时区制作时间字符串

  22. 22

    如何在Ruby中使用时区将时间戳转换为秒

  23. 23

    如何在python中使用时区最好地调整时间戳?

  24. 24

    如何在IE11中使用时区制作时间字符串

  25. 25

    如何在mysql中使用时区将纪元时间转换为标准格式

  26. 26

    Javascript RegExp Replace获得时间

  27. 27

    在PostgreSQL中获得时间戳的年份

  28. 28

    在PostgreSQL中获得时间戳记的年份

  29. 29

    Bootstrap Datetimepicker获得时间部分

热门标签

归档