本
java.util.Date类是持有1970年1月00:00:00,UTC以来毫秒数的容器。请注意,该类
Date对时区一无所知。
Calendar如果您需要使用时区,请使用class
。( 编辑 2017年1月19日:如果您使用的是Java 8,请使用包中的新日期和时间API
java.time)。
上课
Date并不适合容纳没有日期的小时数(例如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);



