【发布时间】:2016-02-02 05:43:49
【问题描述】:
我正在寻找一种合理的方法来设置 jodatime 的 DateTime 毫秒值。在 Intellij IDEA (v15) 中调试时,我正在查看以下代码:
public String getDayOfWeek(String timezone) {
DateTime now = DateTime.now(DateTimeZone.forID(timezone));
return now.dayOfWeek().getAsText();
}
如果我通过更改DateTime 实例的millis 字段来更改now 的值以在return 语句上设置断点以反映与millis 不同的(有效)纪元时间,Intellij 会错误地认为该值我正在尝试设置超出int 的容量。这是有道理的,因为带有毫秒的纪元是 13 位数字,而 IIRC int 只能存储 2^32-1。
对于没有毫秒的纪元时间,DateTime 实例中没有可见字段。我可以在没有毫秒的情况下成功地设置 10 位纪元时间的值,但显然这不会正确评估;我只是说我能够在调试器中成功设置范围内的值。
有哪些选择?或者,是否有更优雅的方式使用 jodatime 来推导当前的星期几,这也允许我改变值?调用者不分配返回值,而是简单地使用它进行比较。我不想放弃 jodatime,因为这个方法是一大类都使用它的方法的一部分。
提前感谢您的宝贵时间。
【问题讨论】:
-
我不清楚您要做什么。
DateTime是不可变类型;你不应该能够设置它。另外,当您说“millis”时,它是DateTime中的一个字段吗?如果是这样,我就不会开始搞砸了。为什么不创建一个带有纪元毫秒和相关时区的 newDateTime?为什么你想要一个可变类型? (有是MutableDateTime,但我强烈建议避免使用它...) -
是的,millis 是一个字段;我更新了文本以显示这一点。我正在验证对服务器时间敏感的应用程序中的一些逻辑(例如,星期几,用户时区的时间等),我想在不等待实际的情况下练习该逻辑逻辑边界发生。例如,逻辑在周末和工作日的表现不同。在工作日,我想在调试器中改变它以“假装”它是星期六。这样做似乎需要更改 millis 字段,但由于需要毫秒的纪元时间,因此 DateTime 实例在设置时溢出
-
我强烈建议不要使用调试器执行此操作并弄乱实现细节。相反,使用依赖注入和“时钟”抽象(一种提供“现在”概念的服务),以便您可以为您选择的任何场景编写测试。
标签: java intellij-idea jodatime