繁体   English   中英

如何在第二天自动获取 Unix 时间戳?

[英]How can I get Unix Timestamp automatically for every next day?

我需要在确定的时间为接下来的每一天生成以毫秒为单位的 Unix 时间戳。

例如:今天是4/11/2021 在 09:00:00然后时间戳是:1636002000000

明天我需要5/11/2021 在 09:00:00

后天6/11/2021 在 09:00:00

等等...

那么如何在 Java 中获取相同的自动生成的时间戳?

在 Linux 中,您将让 Chron 启动一个可以在某处写入的类,然后在检查写入流后退出。 您会要求它提前大约 30 秒启动,然后类寻找写入文件的时刻,然后自行退出。 对于 java,对于 UNIX 时间戳,java,time.Clock 需要是 UTC。

你会在课堂上使用这样的作品

// static Clock fixed(Instant fixedInstant, ZoneId zone)  note Clock.Instant  

Clock   uxtmptmp = Clock.systemUTC();

// not sure of the behaviour of java.time.Clock.tick()   tick(Clock baseClock, Duration tickDuration) - note Clock.millis()   

Instant instxstmp = Instant.now(uxtmptmp);
//...
long uxepo = instxstmp.getEpochSecond();

我得到了我的解决方案:

首先,我使用获取当前日期、月份和年份

Calendar calendar = Calendar.getInstance();
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        int month = calendar.get(Calendar.MONTH)+1;
        int Year = calendar.get(Calendar.YEAR);

第二次使用 StringBuilder,我在上午 09:00 修复

StringBuilder s1 = new StringBuilder().append(day).append("/")
                .append(month).append("/").append(Year).append(" ")
                .append("09").append(":").append("00");

第三次解析它并获取时间戳:

todayTimeStamp = new SimpleDateFormat("dd/MM/yyyy HH:mm").parse(String.valueOf(s1)).getTime();

时间

像 Samuel Marchant 一样,我建议您使用 java.time,现代 Java 日期和时间 API,用于您的日期和时间工作。

如果您希望每天 9 点,请先将其定义为常量:

private static final LocalTime TIME = LocalTime.of(9, 0);

现在您的毫秒值可以通过这种方式获得:

    ZonedDateTime zdt = ZonedDateTime.now(ZoneId.systemDefault()).with(TIME);
    for (int i = 0; i < 10; i++) {
        long timestampMillis = zdt.toInstant().toEpochMilli();
        System.out.format("%-30s %13d%n", zdt, timestampMillis);

        zdt = zdt.plusDays(1);
    }

刚才运行代码时的输出:

 2021-11-11T09:00+01:00[Europe/Paris] 1636617600000 2021-11-12T09:00+01:00[Europe/Paris] 1636704000000 2021-11-13T09:00+01:00[Europe/Paris] 1636790400000 2021-11-14T09:00+01:00[Europe/Paris] 1636876800000 2021-11-15T09:00+01:00[Europe/Paris] 1636963200000 2021-11-16T09:00+01:00[Europe/Paris] 1637049600000 2021-11-17T09:00+01:00[Europe/Paris] 1637136000000 2021-11-18T09:00+01:00[Europe/Paris] 1637222400000 2021-11-19T09:00+01:00[Europe/Paris] 1637308800000 2021-11-20T09:00+01:00[Europe/Paris] 1637395200000

请享受与您自己的答案中的代码相比,不仅要简单得多,而且最重要的是,阅读代码要自然得多。 与 Java 1.0 和 1.1 中旧的和设计不佳的类相比,这是 java.time 的典型特征。

关联

Oracle 教程:日期时间解释了如何使用 java.time。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM