如何每隔一天自动获取 Unix 时间戳?

Posted

技术标签:

【中文标题】如何每隔一天自动获取 Unix 时间戳?【英文标题】:How can I get Unix Timestamp automatically for every next day? 【发布时间】:2021-12-18 10:24:16 【问题描述】:

我需要为每个第二天的特定时间生成以毫秒为单位的 Unix 时间戳

例如: 今天是 2021 年 4 月 11 日 09:00:00,那么时间戳是:1636002000000

明天我需要 2021 年 5 月 11 日 09:00:00

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

等等……

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

【问题讨论】:

你需要这个做什么? 长历元 = System.currentTimeMillis()/1000;以秒为单位返回纪元。 epochconverter.com Unix Epoch 于 1970 年 1 月 1 日,UTC java.util.Date 从这个日期开始,而不是在 0 年 0 日 0 分钟。所以使用 Duration 或 Period 进行 java.time 调整windsolarhybridaustralia.x10.mx/… @ThorbjørnRavnAndersen 我正在开发每天早上 9 点从 api 获取数据的应用程序。我是编程新手 这听起来像是您操作系统中的调度程序可以帮助您。 【参考方案1】:

java.time

与 Samuel Marchant 一样,我建议您使用现代 Java 日期和时间 API java.time 来处理日期和时间。

如果您希望每天 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 Tutorial: Date Time 解释如何使用 java.time。

【讨论】:

【参考方案2】:

在 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();

【讨论】:

【参考方案3】:

我找到了解决方案。

首先,我得到了当前的日期、月份和年份:

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();

【讨论】:

这是一个糟糕的解决方案。 CalendarSimpleDateFormat 类设计不佳且早已过时,后者尤其是出了名的麻烦。没有人应该想使用它们。改用ZonedDateTime 和java.time, the modern Java date and time API, 中的其他类。

以上是关于如何每隔一天自动获取 Unix 时间戳?的主要内容,如果未能解决你的问题,请参考以下文章

如何在每隔一天或每隔一天安排一次 UILocalNotification?

IIS每隔一段时间就无法进行访问,重启服务也不行,必须重启服务器才可以,请问是啥情况?如何解决?

怎么自动发邮件(就是我想每隔一分钟邮件自动发)

在Excel中如何用vba实现:每隔一段时间自动将工作簿保存到以当时时间为文件名的文件中

vb怎么每隔一秒自动点击按钮

每隔一段时间自动执行一次某个方法