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

|| 我正在尝试获取自Java时代以来的天数,周数,月数。 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));
    
        我几乎对所有答案实际上都在计算actually6ѭ和
now
之间的天感到惊讶。使用
java.time.LocalDate
就像这样简单:
LocalDate.now().toEpochDay()
    
        
Date.getTime()
-返回自此Date对象表示的1970年1月1日格林尼治标准时间00:00:00以来的毫秒数。 您可以使用此信息,并了解要进行计算的时间间隔中的毫秒数。     
        
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;
    

要回复问题请先登录注册