如何获取 IST 格式的当前系统时间并将其与 HH:mm:ss 格式的时间(字符串数据类型)进行比较? java语言的解决方案

Posted

技术标签:

【中文标题】如何获取 IST 格式的当前系统时间并将其与 HH:mm:ss 格式的时间(字符串数据类型)进行比较? java语言的解决方案【英文标题】:How do I get current system time in IST format and compare it to a time in HH:mm:ss format (which is in String datatype)? solution in java language 【发布时间】:2022-01-09 12:55:19 【问题描述】:
SimpleDateFormat time_formatter = new SimpleDateFormat("HH:mm:ss");
String current_time_str = time_formatter.format(System.currentTimeMillis());
Date currentTime = time_formatter.parse(current_time_str);
Date userTime = time_formatter.parse(timeSlots);

当我这样做时,我得到的结果不正确,因为服务器时间是 UTC 格式。

【问题讨论】:

什么是IST格式? 你的问题很模糊。重写以解释您的目标。您是否尝试将在特定时区看到的时间与一天中的指定时间进行比较? 为什么是 Spring 的标签? “UTC 格式”是什么意思? UTC 不是一种格式。 我强烈建议您不要使用SimpleDateFormatDate。这些类的设计很差,因此使用起来很麻烦,而且它们早就过时了。使用 java.time、omdern Java 日期和时间 API 及其LocalTime 类。请参阅 Basil Bourque 的高质量回答。 【参考方案1】:

tl;博士

LocalTime
.parse( input )
.isBefore( 
    LocalTime.now( ZoneId.of( "Asia/Kolkata" ) ) 
)

详情

您正在使用糟糕的日期时间类,这些类在几年前被 JSR 310 中定义的现代 java.time 类所取代。切勿使用 SimpleDateFormatDate

捕捉与 UTC 零时分秒的偏移量的当前时刻。

Instant instant = Instant.now() ;

调整到时区。

IST 不是实时时区。这种 2-4 个字母的缩写只是一个粗略的指标,表明某个地区是否使用夏令时 (DST)。这些缩写不规范,甚至不是唯一的!例如,IST 通常用于表示爱尔兰标准时间以及印度标准时间。这些缩写仅用于向 5e 展示,绝不用于业务逻辑、数据存储、数据交换、日志记录或调试。

Real time zones 使用Continent/Région 的格式命名。

ZoneId z = ZoneId.of( "Asia/Kolkata" ) ;

将我们的时刻调整到那个区域。时间线上的同一点,但通过该地区人们使用的挂钟时间可以看出。

ZonedDateTime zdt = instant.atZone( z ) ;

提取一天中的时间。

LocalTime currentTimeOfDayKolkata = zdt.toLocalTime() ;

解析一天中的输入时间。无需指定格式模式,因为您的输入符合 java.time 类中默认使用的 ISO 8601 标准。

LocalTime localTimeInput = LocalTime.parse( input ) ;

做你的比较。

boolean isInputBeforeCurrentTimeOfDayKolkata = localTimeInput.isBefore( currentTimeOfDayKolkata ) ;

请注意,在这段代码中,我们没有依赖 JVM 当前的默认时区。我们的计算机是设置为 UTC 时间还是设置为 Africa/Timbuktu 无关紧要。

所有这些都已经在 Stack Overflow 上多次介绍过。搜索以了解更多信息。

【讨论】:

以上是关于如何获取 IST 格式的当前系统时间并将其与 HH:mm:ss 格式的时间(字符串数据类型)进行比较? java语言的解决方案的主要内容,如果未能解决你的问题,请参考以下文章

js获取yyyy-mm-dd hh:mm:ss格式的当前系统时间

如何获取当前位置并将其与其他 lolation 或几乎关于 android studio 中的第二个位置进行比较

Java 获取当前时间的小时(24小时制)

Java:以“hh:MM:ss a”格式获取时间[重复]

使用 html 获取当前位置并将其与 javascript 一起使用

如何在 Java 中以 YYYY-MM-DD HH:MI:Sec.Millisecond 格式获取当前时间?