获取当前日期与自定义时间



我有一些时间Strings,如"09:00""17:30",我需要检查当前时间是否在该范围内。

我想我可以做这样的比较:

SimpleDateFormat format = new SimpleDateFormat("HH:mm");
Date now = new Date();
Date begin;
Date end;
begin = format.parse(begin_string);
end = format.parse(end_string);
if (now.compareTo(begin) > 0 && end.compareTo(now) > 0)
    return true;
else
    return false;

结果是,当我解析字符串时,时间被正确解析,但是日期被设置为1970年1月1日。这样,代码将始终返回false

我想知道如何将beginend设置为当前日期,但时间来自它们的字符串。

您也可以像这样重用当前时间的格式对象:

SimpleDateFormat format = new SimpleDateFormat("HH:mm");
Date now = new Date();
String time = format.format(now); // format to wall time loosing current date
System.out.println(time);
now = format.parse(time); // reparse wall time
System.out.println(now);

因此,您可以使用隐式使用系统的标准时区将now转换为1970,然后可以使用它与beginend进行直接比较。

Date begin = format.parse("09:00");
Date end = format.parse("21:30");
return (begin.before(now) && end.after(now)); // open-bounded interval
  • 获取当前时间,Calendar.getInstance();
  • 获取另外2个当前时间实例,并根据输入设置时间字段
例如:

Calendar.set(Calendar.HOUR_OF_DAY, 1);
  • 和调用compare()在时间边界

您应该真正使用日历。然后,您可以根据从字符串解析的值分别设置小时和分钟。然后得到以毫秒为单位的时间,并比较它们。

Date now = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(now);
cal.set(Calendar.HOUR_OF_DAY, hours);
cal.set(Calendar.MINUTE, minutes);
long time = cal.getTimeInMillis();

您还可以使用出色的Joda库。在我看来,Joda是处理日期和时间的一种更好的方式。

打包的java.util.Date &日历类是出了名的麻烦。避免它们。使用jdbc - time库或新的java。Java 8中的time包(灵感来自JSR 310定义的Joda-Time)。

如果您真的不关心时区或日期,可以使用Joda-Time LocalTime类或java。time LocalTime类。

警告:Naïve程序员通常认为他们只需要本地时间,因此可以忽略时区,但后来会后悔自己的立场。

<标题> Joda-Time h1> 果您的时间是正确的ISO 8601格式(24小时,正确的位数),那么您可以直接将字符串输入传递给LocalTime的构造函数,而不必费心解析。这个类有一个内置的ISO 8601风格的解析器。
String inputStart = "09:00";
String inputStop = "17:30";
LocalTime start = new LocalTime( inputStart );
LocalTime stop = new LocalTime( inputStop );
LocalTime now = LocalTime.now();
// Comparing using Half-Open logic, where beginning is inclusive and ending is exclusive.
boolean isNowContainedWithinInterval = ( ( now.isEqual( start ) ) || ( now.isAfter( start ) ) ) && ( now.isBefore( stop ) );

转储到控制台…

System.out.println( "start: " + start );
System.out.println( "stop: " + stop );
System.out.println( "now: " + now );
System.out.println( "isNowContainedWithinInterval: " + isNowContainedWithinInterval );

运行时……

start: 09:00:00.000
stop: 17:30:00.000
now: 12:42:06.567
isNowContainedWithinInterval: true

在现实世界中,我将添加一个断言测试来证明停止时间晚于开始时间,以验证输入

相关内容

  • 没有找到相关文章

最新更新