如何使用Java找到从午夜经过的秒数?java.time

2022-09-01 04:07:55

我需要一个函数,告诉我从午夜经过了多少秒。我目前正在使用,但它给了我像UNIX一样的时间戳。System.currentTimeMillis()

如果我也能得到毫秒,这对我来说将是一个奖励。


答案 1

如果您使用的是Java > = 8,则可以轻松完成:

ZonedDateTime nowZoned = ZonedDateTime.now();
Instant midnight = nowZoned.toLocalDate().atStartOfDay(nowZoned.getZone()).toInstant();
Duration duration = Duration.between(midnight, Instant.now());
long seconds = duration.getSeconds();

如果您使用的是Java 7或更低版本,则必须通过日历从午夜开始获取日期,然后减去。

Calendar c = Calendar.getInstance();
long now = c.getTimeInMillis();
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
long passed = now - c.getTimeInMillis();
long secondsPassed = passed / 1000;

答案 2

java.time

使用 Java 8 及更高版本中内置的 java.time 框架。请参阅教程

import java.time.LocalTime
import java.time.ZoneId

LocalTime now = LocalTime.now(ZoneId.systemDefault()) // LocalTime = 14:42:43.062
now.toSecondOfDay() // Int = 52963

最好显式指定 ,即使想要默认的指定。ZoneId


推荐