我在数据库中有2个日期对象,它们代表公司的工作时间。
我只需要几个小时,但是因为我必须保存日期。它看起来像这样:
Date companyWorkStartHour;
Date companyWorkEndHour;
开始时间:12-12-2001-13:00:00完成时间:12-12-2001-18:00:00
我有公司和用户所在的时区。(我的服务器可能在另一个时区)。
TimeZone userTimeZone;
TimeZone companyTimeZone;
我需要检查用户的当前时间(考虑他所在的时区)是否在公司工作时间之内(考虑公司所在的时区)。
我该怎么做?我用Java日历奋斗了一个多星期,但没有成功!
本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);
我试图在elasticsearch查询中使用无痛语言来比较小时数。我想问一下这样的问题: 但我有错误: 无法应用 [ 嵌套文档的方案是: (这些值的格式为“2:00”或“18:00”)。 我尝试过使用< code >。日期 或<代码>。value,但它不起作用,因为我的变量只包含小时而不是日期时间。 有人能帮帮我吗:)
问题内容: 例如,假设我有 我如何确定现在是否在这个时间之前?我努力了 但是日期为1970年,因此比较失败 问题答案: 您总是可以做相反的事情:
问题内容: 我看到可以进行日期比较,也可以进行日期比较,但是我一直在努力寻找如何检查当前时间()是否早于指定时间(例如上午8点),还是晚于指定时间(例如上午8点),而不管日期如何。 问题答案: 您 无法 将特定时间点(例如“现在”)与一个固定的重复发生的事件(每天早上8点发生)进行比较。 您可以检查是否现在之前或之后, 今天 上午8点:
问题内容: 同时执行: 我目前正在学习do-while vs while,并且想用while重写上面的java片段(已经声明和初始化)。以下重写的代码是否正确: 而: 干杯 问题答案: 之间的区别和是 当 比较完成。使用,您将在最后进行比较,因此至少要进行一次迭代。 您的示例的等效代码 等效于: 一般理解 甲环是一个 出口控制的循环 ,这意味着它离开末。甲环是一个 条目控制的循环 ,这意味着该条件
本文向大家介绍我们如何在Java中使字符串比较不区分大小写?,包括了我们如何在Java中使字符串比较不区分大小写?的使用技巧和注意事项,需要的朋友参考一下 我们可以通过各种方式比较Java中的字符串- 使用方法-的的compareTo()方法两个字符串按字典顺序进行比较。比较是基于字符串中每个字符的Unicode值。在字典上比较此String对象表示的字符序列与自变量字符串表示的字符序列。 示例
问题内容: 我有时间,必须由用户以这种格式输入。 但是,我想比较上午10点到下午6点之间的时间(例如11:22)?但是,我该如何比较呢? 问题答案: Java还没有一个好的内置类(它有一个用于JDBC查询的类,但这不是你想要的)。 一种选择是使用JodaTime API和它的本地时间类。 只使用内置的Java API,就只能使用java.util.Date。你可以使用SimpleDateForma