gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 00:15:28 24 4
gpt4 key购买 nike

我正在尝试创建一个只在给定时间之间工作的函数。

即:如果 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();
}

最佳答案

tl;博士

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 & SimpleDateFormat

Answer by Yoni接近是正确的解决方案,但使用 java.util.Date 会继续让您感到困惑类(class)。 切勿使用java.util.Date ,停下来,放手,继续前进。

那些遗留的日期时间类是一团糟。 Sun、Oracle 和 JCP 社区几年前就放弃了它们,采用了 JSR 310 。你也应该如此。

你说:

i.e: If startTime is "13:00" and endTime is "14:00" then every day when the user uses my app at/between this time then call the function, else do nothing.

LocalTime

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

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

捕捉特定时区的当前时刻。

ZoneId

您可以假设用户想要使用 JVM 的默认时区。

ZoneId zoneId = ZoneId.systemDefault() ;

如果很重要,您应该与用户确认他们想要的时区。指定real time zone名称使用格式 Continent/Region ,绝不是 2-4 个字母的伪区域,例如 IST , EST , PST

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

ZonedDateTime

确定时区问题后,捕捉该时区中看到的当前时刻。

ZonedDateTime now = ZonedDateTime.now( zoneId ) ;

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

LocalTime currentTimeOfDay = now.toLocalTime() ;

比较 LocalTime对象

与您的目标开始结束进行比较。

通常最好使用半开放方法来定义时间跨度,其中开始是包含,而结束是排除

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
}

关于java - 将字符串 startTime 和 endTime 与当前时间进行比较并执行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66358680/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com