首页 > 解决方案 > 我如何获得自纪元以来经过的微秒长(时间),然后在 Java 8 中从同一时间获得月份和年份

问题描述

我找到了这段代码:

long timeStampSeconds = ChronoUnit.MICROS.between(Instant.EPOCH, Instant.now());

但是当我使用以下代码将其转换回获取月份和年份时,它给出了错误的输出。

try {
    epochLong = Long.parseLong(epoch);
} catch (RuntimeException e) {
    //Log exception
    return null;
}

Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(epochLong);
String month = String.valueOf(cal.get(Calendar.MONTH));
String year = String.valueOf(cal.get(Calendar.YEAR));
//print month and year

关于如何在微秒内生成它并获得正确月份和年份的任何指示?请帮忙。

标签: javadatetimejava-8

解决方案


如果您使用java.time的是 Java-8,则可以使用:

long timeStampSeconds = ChronoUnit.MICROS.between(Instant.EPOCH, Instant.now());

回退,您可以将其转换为瞬间,然后将瞬间转换为ZoneDateTime

Instant inst = Instant.EPOCH.plus(timeStampSeconds, TimeUnit.MICROSECONDS.toChronoUnit());
ZonedDateTime zdt = inst.atZone(ZoneId.of("Europe/Paris"));

然后你可以得到月,年,日,小时,...

Month month = zdt.getMonth();
int year = zdt.getYear();

输出

MICROS:       1574073141066090
ZoneDateTime: 2019-11-18T11:32:21.066090+01:00[Europe/Paris]

推荐阅读