获取自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;
    

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...