我有一个关于在Java中使用时间的问题,更具体地说是在Android中。

我正在开发一种设备,该设备需要检查以查看今天是否已完成对远程服务器的更新。我通过比较昨晚/今天早晨午夜的时间(以毫秒为单位)与当前时间(以毫秒为单位)进行此操作。

所以我的代码如下:

Calendar now = Calendar.getInstance();
long milliseconds = now.getTimeInMillis();
long since_midnight = milliseconds%(86400000);
long checkpoint = (milliseconds - since_midnight);


但是,当我使用以下命令将检查点变量转换为日期时:

SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss");
last_logged_text=formatter.format(checkpoint);


我得到的时间代表是今天上午1点。

我意识到这与夏令时有关,但是我不确定如何解决。

任何帮助,不胜感激。

谢谢

凯夫

最佳答案

如您所言,这是因为时代和现在具有不同的时区,这要归功于DST。

一种更好的方式来做您想要的事情是获取“现在”,放弃时间部分,让您昨晚午夜。

Calendar midnight = Calendar.getInstance ();

midnight.set (Calendar.HOUR_OF_DAY, 0);
midnight.set (Calendar.MINUTE, 0);
midnight.set (Calendar.SECOND, 0);
midnight.set (Calendar.MILLISECOND, 0);

long millisSinceMidnight = System.currentTimeMillis() - midnight.getTimeInMillis();

09-11 18:05