Rik*_*iki 7 java timezone calendar date
我在数据库中有2个日期对象代表公司的工作时间.
我只需要几个小时,但因为我必须保存日期.它看起来像这样:
Date companyWorkStartHour;
Date companyWorkEndHour;
Run Code Online (Sandbox Code Playgroud)
开始时间:12-12-2001-13:00:00结束时间:12-12-2001-18:00:00
我有公司和用户的时区.(我的服务器可能在另一个时区).
TimeZone userTimeZone;
TimeZone companyTimeZone;
Run Code Online (Sandbox Code Playgroud)
我需要检查用户当前时间(考虑他的时区)是否在公司工作时间内(考虑公司的时区).
我该怎么做?我在Java日历上挣扎了一个多星期而没有成功!
本java.util.Date类是持有自1970年1月1日,00:00 UTC毫秒数的容器.请注意,课程Date不知道任何时区.Calendar如果需要使用时区,请使用类.(编辑 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);
Run Code Online (Sandbox Code Playgroud)
如果您还想花费几分钟(而不仅仅是几小时),您可以执行以下操作:
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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12104 次 |
| 最近记录: |