当前位置: 首页 > 知识库问答 >
问题:

以秒为单位获取一天中的当前时间

傅恺
2023-03-14

有没有办法以秒为单位获取一天中的当前时间?请注意,我问的是一天中的时间,而不是UTC时间。

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

假设现在是上午 10:00。我应该得到 36,000 秒,如果我的时间是下午 5:00,我应该得到 61,200 秒。

PS:我不知道现在的时间。程序将使用currentTime()函数自行计算。

共有3个答案

司徒兴思
2023-03-14

我建议:

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

注意事项:

  • 使用一个明确的时区来提醒读者和你自己时区的选择很重要,你已经做出了有意识的选择。要么ZoneId.system默认(),或者更好的是在你的情况下给出一个命名的区域,比如ZoneId.of(欧洲/罗马)
  • 无论何时开始,代码段都会将上午10:00转换为36,000;由于夏季时间和其他异常情况,它可能尚未在午夜0:00开始,并且可能在清晨有间隙或重叠。要获得一天开始以来的真实秒数,您将需要一些涉及LocalDate.now(你的时区). atStartOfDay(你的时区)的计算。
苏涛
2023-03-14

使用java.time.LocalTimejava.time.temporal.着急场

// 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.的答案所示)。

    作为时区名称,请始终使用IANA时区名称(格式始终为Continent/City,如 or CST或 PST),因为它们不明确且不标准。您可以通过调用 ZoneId.getAvailableZoneIds()来获取可用时区列表(并选择最适合您的系统的时区)。

  • 端木夕
    2023-03-14

    在 Java 8 中,您可以创建一个持续时间实例。
    例如:

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

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

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

    来自java.time.LocalTime javadoc:

    public int toSecondOfDay()
    

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

     类似资料:
    • 问题内容: 在Unix系统上,是否有办法在Java中获得具有微秒级精度的时间戳?类似于C的gettimeofday函数。 问题答案: 不,Java没有该功能。 它确实具有System.nanoTime(),但是仅提供了一些先前已知时间的偏移量。因此,虽然您不能从中获取绝对数字,但可以使用它来测量纳秒(或更高)的精度。 请注意,JavaDoc表示,尽管这提供了纳秒级的精度,但这并不意味着纳秒级的精度

    • 问题内容: 在我可以设置例如 是否有任何符号(%something)以毫秒为单位返回当前时间? 问题答案: 没有完全符合您需要的Log4J符号。 以给定的模式返回当前日期,该模式由(放在方括号之间的模式)定义,但是没有给您以毫秒为单位的时间。 给出自 执行开始以来的 毫秒数。 实现所需目标的一种可能方法是扩展Log4j的行为,这要复杂得多,但是如果绝对必要,请按以下步骤进行: 自定义log4j(编

    • 问题内容: 我有一些用Go编写的代码,我正在尝试更新这些代码以使用最新的每周构建。(它最后一次在r60下构建)。现在,一切正常,除了以下几位: 关于如何更新它以与当前Go实施一起使用的任何建议? 问题答案:

    • 问题内容: 我需要类似的简单内容,但需要自1970年以来的秒数,而不是当前日期,小时,分钟和秒。 似乎没有提供该选项。有没有简单的方法? 问题答案: 这应该工作:

    • Linux中是否有shell命令来获取以毫秒为单位的时间?

    • 问题内容: Linux中是否有shell命令来获取时间(以毫秒为单位)? 问题答案: 返回秒数+当前纳秒。 因此,这就是您所需要的。 例: 返回自纪元以来的秒数(如果有用)。