Java时区比较_如何在Java中比较不同时区的小时数?

java.util.Date类是一个容器,自1970年1月1日00:00:00 UTC以来保持若干毫秒.请注意,类Date不知道任何关于时区的信息.如果需要使用时区,请使用班级日历. (编辑2017年1月19日:如果您使用的是Java 8,请在java.time包中使用新的日期和时间API).

类日期不适合持有没有日期的小时数(例如13:00或18:00).它根本就不是为了这个目的而制作的,所以如果你试图像那样使用它,就像你似乎在做的那样,你会遇到很多问题而你的解决方案也不会优雅.

如果您忘记使用类Date来存储工作时间并只使用整数,这将更简单:

Date userDate = ...;

TimeZone userTimeZone = ...;

int companyWorkStartHour = 13;

int companyWorkEndHour = 18;

Calendar cal = Calendar.getInstance();

cal.setTime(userDate);

cal.setTimeZone(userTimeZone);

int hour = cal.get(Calendar.HOUR_OF_DAY);

boolean withinCompanyHours = (hour >= companyWorkStartHour && hour < companyWorkEndHour);

如果您还想考虑几分钟(而不仅仅是几小时),您可以执行以下操作:

int companyWorkStart = 1300;

int companyWorkEnd = 1830;

int time = cal.get(Calendar.HOUR_OF_DAY) * 100 + cal.get(Calendar.MINUTE);

boolean withinCompanyHours = (time >= companyWorkStart && time < companyWorkEnd);

Java时区概念是非常重要的,因为在开发需要处理不同时区的时间。下面是关于Java时区的一些详解: 1. 世界时区 全球被分为24个时区,每个时区都有一个对应的UTC偏移量,表示该地区与协调世界时(UTC)之间的差异。例如,北京时间是UTC+8,纽约时间是UTC-5。 2. Java时区 Java时区使用了ID来标识。它们遵循了IETF的时区标识符,例如“America/New_York”和“Asia/Shanghai”。这些ID是唯一的,并且对应于特定的时区偏移量和时区规则。 3. 时区的转换 使用Java的DateTimeFormatter类,可以将时间从一个时区转换为另一个时区。例如,将纽约时间转换为北京时间: ``` DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); LocalDateTime dateTime = LocalDateTime.parse("2022-06-30 10:30:00", formatter); ZoneId newYorkZone = ZoneId.of("America/New_York"); ZoneId beijingZone = ZoneId.of("Asia/Shanghai"); ZonedDateTime newYorkTime = ZonedDateTime.of(dateTime, newYorkZone); ZonedDateTime beijingTime = newYorkTime.withZoneSameInstant(beijingZone); System.out.println(beijingTime.format(formatter)); ``` 4. 时区的默认值 Java时区默认值是系统时区。可以使用System类的getProperty()方法获取系统时区: ``` System.out.println(System.getProperty("user.timezone")); ``` 5. 时区的设置 可以使用System类的setProperty()方法设置时区: ``` System.setProperty("user.timezone", "Asia/Shanghai"); ``` 需要注意的是,时区设置必须在程序启动时进行,否则可能会出现意料之外的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值