比较字符串startTime和endTime与当前时间并执行操作



我想做一个函数,我想只在给定的时间之间工作。

。e:如果startTime为"13:00";, endTime为14:00;然后每天当用户在这段时间使用我的应用程序时,调用该函数,否则什么都不做。

这是我在试图弄清楚的时候遇到的,但这不起作用。


SimpleDateFormat sdf = new SimpleDateFormat("HH:mm", Locale.UK);
try {
Date inTime = sdf.parse("13:00");
Date outTime = sdf.parse("14:00");
if (outTime != null) {
if (isTimeAfter(inTime, outTime)) {
Toast.makeText(SplashScreenActivity.this, "Time validation success", Toast.LENGTH_LONG).show();
}
else {
Toast.makeText(SplashScreenActivity.this, "Exit time must be greater then entry time", Toast.LENGTH_LONG).show();
}
}
} catch (ParseException e) {
e.printStackTrace();
Toast.makeText(SplashScreenActivity.this, "Parse error", Toast.LENGTH_LONG).show();
}

public static boolean isTimeAfter(Date startTime, Date endTime) {
return !endTime.before(startTime);
}

任何帮助都是感激的,谢谢!

更新1:

SimpleDateFormat sdf = new SimpleDateFormat("HH:mm", Locale.UK);
Date now = new Date(System.currentTimeMillis());
try {
Date inTime = sdf.parse("03:19");
Date outTime = sdf.parse("03:21");
if (now.after(inTime) && now.before(outTime)) {
Toast.makeText(SplashScreenActivity.this, "Time validation success", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(SplashScreenActivity.this, "Nope, it isn't wokring", Toast.LENGTH_LONG).show();
}
} catch (ParseException e) {
e.printStackTrace();
Toast.makeText(SplashScreenActivity.this, "Parse error", Toast.LENGTH_LONG).show();
}

br

LocalTime start = null ;
LocalTime end = null ;
try
{
start = LocalTime.parse( "03:19" ) ;
end = LocalTime.parse( "03:21" ) ;
} 
catch ( DateTimeParseException e ) 
{
… handle faulty input
}
LocalTime currentTimeOfDay = LocalTime.now( ZoneId.systemDefault() ) ;
if( 
( ! currentTimeOfDay.isBefore( start ) )   // "Is not before …" is a briefer way of asking "Is equal to or later than …".
&&
currentTimeOfDay.isBefore( end )
)
{ … within target times }
else
{ … outside target times }

停止使用Date&SimpleDateFormath1> Yoni的答案接近于正确的解决方案,但通过使用java.util.Date类继续您的困惑。永远不要使用java.util.Date

,停下来,放手,继续生活。 那些遗留的日期时间类是一团乱麻。Sun、Oracle和JCP社区在几年前采用JSR 310时放弃了它们。你也应该这样。 你说:

。e:如果startTime为"13:00";, endTime为14:00;然后每天当用户在这段时间使用我的应用程序时,调用该函数,否则什么都不做。

LocalTime

表示你的开始和结束时间。

LocalTime start = LocalTime.of( 13 , 0 ) ;
LocalTime end = LocalTime.of( 14 , 0 ) ;

捕捉在特定时区中看到的当前时刻。

ZoneId

您可以假设用户希望使用JVM的默认时区。

ZoneId zoneId = ZoneId.systemDefault() ;

如果关键,您应该与用户确认他们的预期时区。使用Continent/Region格式指定实时时区名称,不要使用2-4个字母的伪区域,如ISTESTPST等。

ZoneId zoneId = ZoneId.of( "America/Edmonton" ) ;

ZonedDateTime

确定了时区问题后,捕获该区域中所看到的当前时刻。

ZonedDateTime now = ZonedDateTime.now( zoneId ) ;

从该时刻提取一天中的时间值。

LocalTime currentTimeOfDay = now.toLocalTime() ;

比较LocalTime对象

与目标起始端比较。

通常最好使用Half-Open方法来定义时间范围,其中开始是包含,而结束是不包含

if( 
( ! currentTimeOfDay.isBefore( start ) )   // "Is not before …" is a briefer way of asking "Is equal to or later than …".
&&
currentTimeOfDay.isBefore( end )
)
{ … within target times }
else
{ … outside target times }

如果您必须通过解析标准ISO 8601格式的文本来获得一天的开始和结束时间值,其中小时为24小时时钟(0-23)并使用填充零,则只需调用LocalTime.parse方法。不需要指定格式化模式。不需要指定Locale.

LocalTime start = LocalTime.parse( "03:19" ) ;
LocalTime end = LocalTime.parse( "03:21" ) ;

防止输入错误,设置DateTimeParseException陷阱。

LocalTime start = null ;
LocalTime end = null ;
try
{
start = LocalTime.parse( "03:19" ) ;
end = LocalTime.parse( "03:21" ) ;
} 
catch ( DateTimeParseException e ) 
{
… handle faulty input
}

问题是你正在比较你的两个固定日期。你查一下13:00是在14:00之后。这总是正确的

要比较的是当前时间。您希望当前时间在开始时间之后,在结束时间之前。

从java 8开始,还建议使用LocalTime而不是Date。这解决了许多您可能遇到的时区等问题。

要获得当前时间,可以使用LocalTime.now()。代码片段看起来像这样然后

LocalTime now = LocalTime.now();
now.isAfter(startTime) && now.isBefore(endTime);

最新更新