【发布时间】:2019-10-16 03:27:27
【问题描述】:
我正在尝试编写一个仅打印当前日期的程序。所以我只需要年、月和日。我不允许使用任何日期、日历、公历或时间类来获取当前日期。我只能使用System.currentTimeMillis() 来获取自纪元以来的当前时间(以毫秒为单位),并使用java.util.TimeZone.getDefault().getRawOffset() 来计算自纪元以来的时区。
到目前为止,我所尝试的是以毫秒为单位的当前时间除以 1000 得到秒,然后 60 得到分钟,然后 60 得到小时,依此类推。这工作正常,直到我从 1970 年 1 月 1 日开始算到 18184 天。我不能简单地将天完全除以 30 或 31,因为并非所有月份都有 30 或 31 天。我也找不到年份,因为闰年是 365 或 364 天。
class JulianDate {
static void main() {
long currentMilli = System.currentTimeMillis() + java.util.TimeZone.getDefault().getRawOffset();
long seconds = currentMilli / 1000;
long minutes = seconds / 60;
long hours = minutes / 60;
long days = hours / 24;
System.out.println("Days since epoch : " + days);
}
}
我需要结束代码来简单地打印10/15/2019 或October 15, 2019。格式无关紧要,我只需要它根据纪元毫秒打印当前日期、月份和年份
【问题讨论】:
-
你认为你可能会倒退吗?您可以在谷歌上找到一个公式来确定闰年。然后酌情以 365 或 366 块计算 1970 年 1 月 1 日之后的年份。然后,当您的剩余天数少于一年时,以当月的实际天数计算月份。你总是从 1 月 1 日开始工作,所以你知道你正在处理的月份,以及它是否是闰年。然后,当您的时间少于 30 天且不是 2 月时,开始计算各个天数。
-
您可能有兴趣阅读此主题:stackoverflow.com/questions/1021324/…
标签: java