如何在第二天自动获取 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

后天 2021 年 6 月 11 日 09:00:00

等等...

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

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

你会在 class

中使用这样的片段
// 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:

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

java.time

像 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。

Link

Oracle Tutorial: Date Time 解释如何使用 java.time。