如何获取 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 不是一种格式。 我强烈建议您不要使用SimpleDateFormat
和Date
。这些类的设计很差,因此使用起来很麻烦,而且它们早就过时了。使用 java.time、omdern Java 日期和时间 API 及其LocalTime
类。请参阅 Basil Bourque 的高质量回答。
【参考方案1】:
tl;博士
LocalTime
.parse( input )
.isBefore(
LocalTime.now( ZoneId.of( "Asia/Kolkata" ) )
)
详情
您正在使用糟糕的日期时间类,这些类在几年前被 JSR 310 中定义的现代 java.time 类所取代。切勿使用 SimpleDateFormat
或 Date
。
捕捉与 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 中的第二个位置进行比较