我正在寻找一种合理的方法来设定jodatime的DateTime millis的值。在Intellij IDEA(v15)中进行调试时,我正在查看以下代码:
public String getDayOfWeek(String timezone) {
DateTime now = DateTime.now(DateTimeZone.forID(timezone));
return now.dayOfWeek().getAsText();
}
如果我通过更改now
实例的millis
字段来突变返回语句,以便改变DateTime
的值,以反映与millis不同的(有效)纪元时间,Intellij错误,我试图设置的值超过int
的容量。这是有道理的,因为具有millis的纪元是13位且IIRC int
只能存储2 ^ 32-1。
DateTime
实例中没有可见字段,没有毫秒的纪元时间。我可以用没有毫秒的10位纪元时间成功设置值,但显然不能正确评估;我只提到它说我能够成功地在调试器中设置范围内值。
有哪些选择?或者,有一个更优雅的方式与jodatime导出一周的当前日期,也允许我改变价值?调用者不会分配返回值,而只是将其用于比较。我不想废弃jodatime,因为这个方法是所有使用它的一大类方法的一部分。
提前感谢您的时间。
答案 0 :(得分:0)
也许您遇到过这个问题,因为使用的值被解释为int
而不是long
?您可以使用带DateTime
参数的long
构造函数之一来指定日期和时间(以毫秒为单位)。例如:
import org.joda.time.*;
import org.joda.time.format.*;
public class JodaTimeMillis {
public static void main(final String[] arguments) {
new JodaTimeMillis().run();
}
private void run() {
DateTimeZone timeZone = DateTimeZone.forID("Europe/Amsterdam");
String pattern = "MM/dd/yyyy HH:mm:ss.SSS";
DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern(pattern);
for (int milliseconds = 619; milliseconds < 629; milliseconds++) {
DateTime dateTime = new DateTime(1234567890000L + milliseconds, timeZone);
System.out.println(milliseconds + ": " + dateTimeFormatter.print(dateTime));
}
}
}
这给出了以下输出(在我的笔记本电脑上),它显示了可以指定的毫秒部分:
619: 02/14/2009 00:31:30.619
620: 02/14/2009 00:31:30.620
621: 02/14/2009 00:31:30.621
622: 02/14/2009 00:31:30.622
623: 02/14/2009 00:31:30.623
624: 02/14/2009 00:31:30.624
625: 02/14/2009 00:31:30.625
626: 02/14/2009 00:31:30.626
627: 02/14/2009 00:31:30.627
628: 02/14/2009 00:31:30.628
您想从调试器运行测试吗?您还可以考虑使用unit tests。