web-dev-qa-db-ja.com

エポック以降の日数、週数、月数をJava

私はエポックからの日数、週数、月数をJavaで取得しようとしています。

Java Calendarクラスは、calendar.get(GregorianCalendar.DAY_OF_YEAR)やCalendar.get(GregorianCalendar.WEEK_OF_YEAR)のようなものを提供します。 。

これをJavaで行うエレガントな方法はありますか?

27
Ariel Vardi

Joda Time library を使用すると、これをかなり簡単に行うことができます。私は、標準のJava日付クラスとカレンダークラスを使用する以外の時間に関連して使用します。ライブラリを使用して以下の例で:

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
35
bamana

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
21
softarn
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));
9
ferronrsmith

ほぼすべての回答が実際にEpochnowの間の日数を計算していることにちょっと驚いています。 Java.time.LocalDateそれは次のように簡単です:

LocalDate.now().toEpochDay()
3
mindex

Date.getTime() -このDateオブジェクトで表される1970年1月1日00:00:00 GMT以降のミリ秒数を返します。

これと、計算を実行するために必要な間隔のミリ秒数に関する知識を使用できます。

0
unholysampler
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);
0
Binil Thomas

elegantを使用する方法はあまり一般的ではないため、私はそうは思わないでしょう。どうしてやりたいのかしら….

とにかく、私が行う方法は、Calendarからエポック日付を減算して、必要なフィールドを取得することです。

Calendar timeSinceEpoch = Calendar.getInstance();
timeSinceEpoch.add(Calendar.YEAR, -1970);

int yearsSinceEpoch = timeSinceEpoch.get(Calendar.YEAR);
int monthsSinceEpoch = timeSinceEpoch.get(Calendar.MONTH) + 12 * yearsSinceEpoch;
0