- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Joda 2.2 LocalDateTime 在处理过程中返回基于不同时区的日期时间。我相信 2.3 中有一些更改来解决围绕 ISOChronology DateTimeZone 缓存的一些竞争条件,但在这种情况下,我认为这不是问题的原因。
直到执行的某个点 LocalDateTime 是基于欧洲/伦敦的默认 jvm 时区,正如我所期望的那样。但过了一段时间,它切换到基于 UTC。结果如下:
20150409-09:10:45.281 DEBUG [Thread-1] LocalDateTime=2015-04-09T09:10:45.281 ISOChronology.getInstance(): ISOChronology[欧洲/伦敦] DateTimeZone.getDefault( ): 欧洲/伦敦指数:20 UTC 指数:12
然后(从那时起一直)
20150409-09:10:46.125 DEBUG [Thread-0] LocalDateTime=2015-04-09T08:10:46.125 ISOChronology.getInstance(): ISOChronology[UTC] DateTimeZone.getDefault():欧洲/伦敦指数:20 UTC 指数:12
LocalDateTime 调用 ISOChronology.getInstance() 来识别本地 DateTimeZone。 ISOChronology 然后调用 DateTimeZone.getDefault() 以返回默认的本地时区。我无法理解的是 DateTimeZone.getDefault() 没有改变,但 ISOChronology.getInstance() 正在从欧洲/伦敦切换到 UTC。我还打印出 ISOChronology 用来在其快速缓存中查找它们的内部索引。他们似乎没有改变。有谁能解释为什么会发生这种情况?
编辑:
这是日志代码:
logger.debug("LocalDateTime=" + new LocalDateTime() + " ISOChronology.getInstance(): " + ISOChronology.getInstance()
+ " DateTimeZone.getDefault(): " + DateTimeZone.getDefault()
+ " index: " + (System.identityHashCode(DateTimeZone.getDefault()) & (64 - 1))
+ " UTC index: " + (System.identityHashCode(DateTimeZone.UTC) & (64 - 1)));
它正在创建一个空的构造函数 LocalDateTime,并检查 ISOChronology.getInstance() 和 DateTimeZone.getDefault() 在那个时间点返回的值,以及 ISOChronology 将在内部使用的索引来查找它们。
最佳答案
答案似乎是 Protostuff(一个提供通过 Protobuff 自动序列化对象的功能的库)在这种情况下覆盖 ISOChronology,因为它构造了一个 DateTime,它正在反序列化为从我们的服务器接收到的有效负载的一部分。 ISOChronology 更改之前的堆栈是:
ISOChronology.getInstance() line: 79
DateTime(BaseDateTime).<init>() line: 61
DateTime.<init>() line: 171
NativeConstructorAccessorImpl.newInstance0(Constructor, Object[]) line: not available [native method]
NativeConstructorAccessorImpl.newInstance(Object[]) line: not available
DelegatingConstructorAccessorImpl.newInstance(Object[]) line: not available
Constructor<T>.newInstance(Object...) line: not available
RuntimeEnv$DefaultInstantiator<T>.newInstance() line: 300
RuntimeSchema<T>.newMessage() line: 345
ByteArrayInput.mergeObject(T, Schema<T>) line: 374
RuntimeUnsafeFieldFactory$13$1.mergeFrom(Input, T) line: 773
RuntimeSchema<T>(MappedSchema<T>).mergeFrom(Input, T) line: 188
IOUtil.mergeFrom(byte[], int, int, T, Schema<T>, boolean) line: 43
ProtobufIOUtil.mergeFrom(byte[], T, Schema<T>) line: 95
在这些反射调用前后,ISOChronology 中的 cCache 的值是 -
之前:
cCache: {Europe/London=ISOChronology[Europe/London], UTC=ISOChronology[UTC]}
之后:
cCache: {Europe/London=ISOChronology[UTC], UTC=ISOChronology[UTC]}
编辑:对于遇到 DateTime 等类似问题的任何人变得不稳定,这是一个关于它的 protostuff 线程:https://groups.google.com/forum/#!topic/protostuff/GmFldwwexUk
关于java - Joda ISOChronology getInstance() 在处理过程中发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29533632/
我是 grails 的新手。我正在使用 joda 插件来获取日期和时间。所以我在单独的列中显示日期和时间。现在我想使用条件搜索日期。 我在 gsp 页面中使用以下代码来搜索日期。
我试图在执行更多计算之前简单地将 TimeZone 信息添加回 LocalDate。 LocalDate 来自使用 ObjectLab LocalDateCalculator 将天数添加到现有 Dat
所以我在使用 JodaTime 年表 IslamicChronology 解析日期时遇到问题,因此编写了一个小示例来演示我的问题。 代码如下: import org.joda.time.Chronol
当我启动我的应用程序时,virgo 会抛出这样的异常: [2015-09-05 11:27:53.254] TCP Connection(2)-127.0.0.1 Installation of
我使用 Spring 从 Web API rest API 检索 JSON 数据,使用 Jackson Joda 模块反序列化 ISO 日期,并将其转换为 Joda DateTime。 Spring
在 Android 设备 (7.0) 上,出现此崩溃: Fatal Exception: org.joda.time.IllegalInstantException: Illegal instant
我需要将 GMT 转换为亚利桑那时间。亚利桑那州目前有 MST(夏令时关闭)。 但是在 Joda Time DateTimeZone 代码中,MST 已映射到 America/Denver: map.
大家早上好。 我想帮助您了解如何使用 1.2.1.1 版本的 Joda Time 完成 org.joda.time.DateTime 到 java.util.Date 的转换。 为什么选择 Joda
试试这个: @Type(type = "org.jadira.usertype.moneyandcurrency.joda.PersistentMoneyAmountAndCurrency") pri
尝试使用 Joda 将包含日期字符串的 JSON 字符串反序列化为 POJO 时遇到异常。 我将 Jackson2 与 Spring 和 Robospice 一起使用。 我遇到以下异常: Could
我有一个招摇的OpenAPI YAML文件,我想使用gradle-swagger-generator-plugin生成Java 这是我的config.json { "useRxJava2": tr
我想使用以下 MDX 语句: with member [x] as now()->plusMonths(1)->withDayOfMonth(1)->minusDay(1) select [x] on
System.out.println( PeriodFormat.getDefault().print(Period.hours(1).plusMinutes(30).plusSeconds(60))
我正在使用 Joda-Time Duration 来获取两个 DateTime 之间的持续时间: DateTime startTimeDate = new DateTime(startTimeDate
当我运行以下代码片段时: import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import java.sql.Times
我正在尝试在 Joda DateTime 中转换毫秒。米利斯是 1338501600000我使用了在线转换器和其他库,所有结果都是 1338501600000 millis 是 Fri Jun 01
我尝试使用以下代码,但收到错误格式无效:“12/11/2013”: String dFrom = ps.utils.gv(request, "dFrom"); String dTo = ps.ut
我正在尝试使用 Joda-Time 的持续时间类来计算两天之间的确切天数差异。这意味着我希望结果是 25.48 天,而不是仅仅 25 天。现在我有: private static final doub
有没有隐藏的方法来获得 Joda-Time以分钟为单位的时间段(或任何其他) 现在我做的是: (period.getHours()*60 + period.getMinutes() + roundTw
有谁知道如何解析日期,例如:Mon Aug 04 16:07:00 CEST 2014使用 Joda 的 DateTime 格式化程序转换为 dd/MM/YYYY HH:MM:SS。我已经尝试过了:
我是一名优秀的程序员,十分优秀!