gpt4 book ai didi

java - 从代表自纪元以来的天数的整数创建 joda DateTime 的实例?

转载 作者:行者123 更新时间:2023-11-29 07:38:10 26 4
gpt4 key购买 nike

在我的应用程序中,它保存了一个偏好,它是一个整数,表示自纪元以来的天数。 (不相关但用于每 x 天创建备份)

鉴于此值,我如何才能可靠地创建 joda DateTime 的实例?

我想通过乘法 value * 24 * 60 * 60 * 1000 将其转换为毫秒,但由于天文学/太阳时,这会是错误的吗?

最佳答案

如果您使用库函数,将天数乘以毫秒数可能更具可读性。我强烈推荐使用 Joda。 :)

您有自纪元 (GMT) 以来的天数,并且您想要一个 DateTime(日期 + 时间 + 时区)。至少,在您进一步了解之前,您需要指定您希望如何处理时间和时区计算。

最简单的方法(这可能不是您想要的)是在本地时区创建一个代表纪元开始的时刻,然后使用 plusDays 添加正确的天数:

// in class - note that this will cache the current default timezone
private static final DateTime EPOCH_START_INSTANT = new DateTime(0);

// West of Greenwich, this will actually represent the "day" before.
// Day 0 will be Dec 31, 1969, local time.
DateTime localTime = EPOCH_START_INSTANT.plusDays(yourDayCount);

为了每 X 天创建一次备份,您可能需要在纪元(1970 年 1 月 1 日)初始化 LocalDate,加上您想要的天数。然后可以相对轻松地将其更改为指定的本地时间。

// in class
private static final EPOCH_LOCALDATE = new LocalDate(1970, 1, 1);
private static final THREE_AM = new LocalTime(3, 0);

LocalDate localDate = EPOCH_LOCALDATE.plusDays(yourDayCount);

// Midnight (or closest valid time thereto) in the default time zone
DateTime startOfDay = localDate.toDateTimeAtStartOfDay();

// 3 AM in the default time zone
DateTime threeAM = localDate.toDateTime(THREE_AM);

关于java - 从代表自纪元以来的天数的整数创建 joda DateTime 的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33109435/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com