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