以秒为单位获取当前时间

问题描述 投票:2回答:5

有没有办法在几秒钟内获得当天的当前时间?注意我问的是当天的时间,而不是UTC时间。

我想要的是0到86,400(12:00 AM - 11:59 PM)之间的值(以秒为单位)。我正在开发一个每天工作的应用程序,当这一天结束时,时间(以秒为单位)应该再次重新开始回到0

所以我们说它是10:00AM。我应该得到36,000秒,如果我的时间是5:00PM,我应该得到61,200秒。

PS:我不知道手头的时间。该程序将使用currentTime()函数自行计算出来。

java java-time
5个回答
4
投票

使用Java 8,您可以创建一个Duration实例。 例如 :

LocalDateTime date = LocalDateTime.now();
long seconds = Duration.between(date.withSecond(0).withMinute(0).withHour(0), date).getSeconds();

或者更简单地说,您可以将LocalDateTime转换为LocalTime实例,然后应用toSecondOfDay()方法:

LocalDateTime date = LocalDateTime.now();
int seconds = date.toLocalTime().toSecondOfDay();

来自java.time.LocalTime javadoc:

public int toSecondOfDay()

将时间提取为一天中的秒数,从0到24 * 60 * 60 - 1。


3
投票

使用java.time.LocalTimejava.time.temporal.ChronoField

// 10:00 AM
LocalTime d = LocalTime.of(10, 0);
System.out.println(d.get(ChronoField.SECOND_OF_DAY)); // 36000

// 05:00 PM
d = LocalTime.of(17, 0);
System.out.println(d.get(ChronoField.SECOND_OF_DAY)); // 61200

// 23:59:59
d = LocalTime.of(23, 59, 59);
System.out.println(d.get(ChronoField.SECOND_OF_DAY)); // 86399

// midnight
d = LocalTime.of(0, 0);
System.out.println(d.get(ChronoField.SECOND_OF_DAY)); // 0

这打印:

36000 61200 86399 0


笔记:

  • 这只是一个例子。如果你想从当前时间获得值,只需使用LocalTime.now()(或LocalTime.now(ZoneId.of("timezone-name"))指向的@Ole V.V.'s answer)。 作为timezone-name,总是使用IANA timezones names(总是使用Continent/City格式,如America/Sao_PauloEurope/Berlin)。避免使用3个字母的缩写(如CSTPST)因为它们是ambiguous and not standard。您可以通过调用ZoneId.getAvailableZoneIds()获取可用时区列表(并选择最适合您系统的时区)。
  • 如果你愿意,你也可以调用d.toSecondOfDay()(它等同于get(ChronoField)内部调用toSecondOfDay)。

2
投票

我建议:

    int secondsOfDay = LocalTime.now(ZoneId.of("Europe/Rome")).toSecondOfDay();

注意事项:

  • 使用明确的时区来提醒读者和您自己,时区的选择很重要,并且您已经做出了有意识的选择。无论是ZoneId.systemDefault(),还是更好的是,如果在你的情况下给出一个像ZoneId.of("Europe/Rome")这样的命名区域是有意义的。
  • 无论何时开始,片段都会将上午10:00转换为36,000;由于夏季时间和其他异常,它可能不会在午夜0点开始,并且可能在早上有一个间隙或重叠。要获得自该日开始以来的真实秒数,您将需要一些涉及LocalDate.now(yourTimeZone).atStartOfDay(yourTimeZone)的计算。

0
投票

您可以将秒分钟小时字段转换为秒并添加它们

Calendar c = new GregorianCalendar();
int totalSecs = c.get(Calendar.SECOND) + 60 * c.get(Calendar.MINUTE) + 3600 * c.get(Calendar.HOUR_OF_DAY);

0
投票

您可以使用SimpleDateFormat来提取小时分钟和秒。它适用于Java 7和Java 6以及Java 8,它适应您当地的时间和时区:

String timeNowHMS[] = new SimpleDateFormat("HH:mm:ss", Locale.ENGLISH)
        .format(System.currentTimeMillis())
        .split(":");

int secondsPassedInTheDay =
    Integer.parseInt(timeNowHMS[0]) * 60 * 60
        + Integer.parseInt(timeNowHMS[1]) * 60
        + Integer.parseInt(timeNowHMS[2]);

© www.soinside.com 2019 - 2024. All rights reserved.