java - 在Linux环境中用Java计算直到午夜的分钟数

标签 java linux date calendar

看一下以下命令:

$ sudo ln -fs /usr/share/zoneinfo/US/Pacific localtime
$ date
Mon Oct 13 15:29:02 PDT 2014
$ sudo ln -fs /usr/share/zoneinfo/US/Hawaii localtime
$ date
Mon Oct 13 12:29:20 HST 2014

这一切都很好。现在我有一些用 java 编写的软件,需要知道距离午夜还有多少分钟,以便它可以执行一些维护。

这是我想出的代码:

// Time to perform maintenance
String rawTime = "23:59";
int hours = Integer.parseInt(rawTime.substring(0, 2));
int minutes = Integer.parseInt(rawTime.substring(3, 5));

// Get current Time
Calendar c = Calendar.getInstance();
long now = c.getTimeInMillis();
Date dateNow = new Date(now);
System.out.println(new Date(now));

// Get midnight
c.set(Calendar.HOUR_OF_DAY, hours);
c.set(Calendar.MINUTE, minutes);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
Date midnight = new Date(c.getTimeInMillis());

// Get Difference
System.out.println(String.format("Calc minutes from %s to %s", dateNow, midnight));       
long result = ((midnight.getTime()/60000) - (dateNow.getTime()/60000));
System.out.println((int) result);

Linux 设置为夏威夷时区时的输出:

Calc minutes from Mon Oct 13 15:36:51 PDT 2014 to Mon Oct 13 23:59:00 PDT 2014
Result:  503

如您所见,我没有得到正确的时间...我得到的是 PDT 而不是 HST。我不太关心为什么日期的 toString() 返回 PDT,因为它与时区无关,但我关心应该如何计算它?

让我们从 '11:59' 开始,计算 linux 认为时间到 '11:59' 为止还有多少分钟......我愿意接受一种解决方案,以不同的方式设置 linux 时间。

谢谢!这应该很难...

最佳答案

java.util.Date 和 .Calendar 类是出了名的麻烦。避开他们。使用 Joda-Time或 Java 8 中新的 java.time 包。

在 Joda-Time 和 java.time 中,日期时间对象确实知道自己指定的时区(与 java.util.Date 不同)。

这里是 Joda-Time 2.5 中的一些示例代码。

DateTimeZone timeZoneHawaii = DateTimeZone.forID( "Pacific/Honolulu" );
DateTime now = DateTime.now( timeZoneHawaii );
DateTime dayStart = now.plusDays(1).withTimeAtStartOfDay();  // Usually 00:00:00.000 but not always because of Daylight Saving Time or possibly other anomalies.
int minutesUntilDayStartsInHawaii = Minutes.minutesBetween( now, dayStart ).getMinutes();

关于java - 在Linux环境中用Java计算直到午夜的分钟数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26350096/

相关文章:

java - HotSpot JVM 选项 HeapDumpOnOutOfMemoryError - 有问题吗?

python - 在linux中使用Python创建SFTP用户

linux - 套接字在午夜断开连接

linux - Bash - 给定日期的小时数

java - 在 Java 中使用正则表达式从格式为 01OCT12 14 :26 的字符串中提取日期

java - 覆盖错误android studio

java - 设置列表项被点击时的背景颜色

java - 如何将用户输入从一个类获取到另一个类

python - 获取家庭路由器上的客户端 MAC 地址列表

javascript - 使用 Javascript 将日期字符串格式化为所需格式