获取自Java中的Epoch以来的天数,周数和月数

我试图获得自Java中Epoch以来的天数,周数,月数。

Java Calendar类提供了诸如calendar.get(GregorianCalendar.DAY_OF_YEAR)或Calendar.get(GregorianCalendar.WEEK_OF_YEAR)之类的东西,这是一个很好的开始,但它并不能完全满足我的需要。

在Java中有一种优雅的方法吗?

你可以使用Joda Time库来轻松完成这项工作 – 除了使用标准的Java Date和Calendar类之外,我还可以使用它。 使用库查看下面的示例:

MutableDateTime epoch = new MutableDateTime(); epoch.setDate(0); //Set to Epoch time DateTime now = new DateTime(); Days days = Days.daysBetween(epoch, now); Weeks weeks = Weeks.weeksBetween(epoch, now); Months months = Months.monthsBetween(epoch, now); System.out.println("Days Since Epoch: " + days.getDays()); System.out.println("Weeks Since Epoch: " + weeks.getWeeks()); System.out.println("Months Since Epoch: " + months.getMonths()); 

当我运行它时,我得到以下输出:

 Days Since Epoch: 15122 Weeks Since Epoch: 2160 Months Since Epoch: 496 

java.time

使用Java 8及更高版本中内置的java.time类。

 LocalDate now = LocalDate.now(); LocalDate epoch = LocalDate.ofEpochDay(0); System.out.println("Days: " + ChronoUnit.DAYS.between(epoch, now)); System.out.println("Weeks: " + ChronoUnit.WEEKS.between(epoch, now)); System.out.println("Months: " + ChronoUnit.MONTHS.between(epoch, now)); 

产量

 Days: 16857 Weeks: 2408 Months: 553 
 Long currentMilli = System.currentTimeMillis(); Long seconds = currentMilli / 1000; Long minutes = seconds / 60; Long hours = minutes / 60; Long days = hours / 24; System.out.println("Days since epoch : " + days); 

要么

 System.out.println("Days since epoch : " + ((int) currentMilli / 86400000)); 

Date.getTime() – 返回自此Date对象表示的1970年1月1日00:00:00 GMT以来的毫秒数。

您可以使用此信息并了解您关心的间隔中有多少毫秒进行计算。

 Calendar now = Calendar.getInstance(); Calendar cal = Calendar.getInstance(); cal.setTimeInMillis(0); // start at EPOCH int days = 0 while (cal.getTimeInMillis() < now.getTimeInMillis()) { days += 1 cal.add(Calendar.DAY_OF_MONTH, 1) // increment one day at a time } System.out.println("Days since EPOCH = " + days); 

我不希望有一种优雅的方式,因为它不是一个非常常见的要求。 我不禁想知道你为什么要这样做……

但无论如何,我这样做的方法是从Calendar减去纪元日期,然后得到你想要的字段:

 Calendar timeSinceEpoch = Calendar.getInstance(); timeSinceEpoch.add(Calendar.YEAR, -1970); int yearsSinceEpoch = timeSinceEpoch.get(Calendar.YEAR); int monthsSinceEpoch = timeSinceEpoch.get(Calendar.MONTH) + 12 * yearsSinceEpoch;