gpt4 book ai didi

安卓比较日期

转载 作者:搜寻专家 更新时间:2023-11-01 07:48:49 25 4
gpt4 key购买 nike

我正在尝试比较这种格式的两个日期。

date1 = Wed Jul 13 17:23:33 GMT+02:00 2016
date2 = Wed Jul 13 17:23:31 CEST 2016

if(date1.after(date2){
//my logic
}else if(date1.before(date2){
//my logic
}

比较好像只发生了几次,哪里认为是错误的?

最佳答案

tl;dr

ZonedDateTime.parse( 
"Wed Jul 13 17:23:33 GMT+02:00 2016" ,
DateTimeFormatter.ofPattern( "EEE MMM d HH:mm:ss z uuuu" )
.withLocale( Locale.ENGLISH )
)
.isAfter(
ZonedDateTime.parse(
"Wed Jul 13 17:23:31 CEST 2016" ,
DateTimeFormatter.ofPattern( "EEE MMM d HH:mm:ss z uuuu" )
.withLocale( Locale.ENGLISH )
)
)

java.time

现代方法使用 java.time 类。

String inputX = "Wed Jul 13 17:23:33 GMT+02:00 2016";
String inputY = "Wed Jul 13 17:23:31 CEST 2016";

定义格式模式以匹配您的输入字符串。

DateTimeFormatter f = DateTimeFormatter.ofPattern( "EEE MMM d HH:mm:ss z uuuu" ).withLocale( Locale.ENGLISH );

ZonedDateTime 类表示一个时刻,时间轴上的一个点,具有特定地区(时区)人们使用的挂钟时间。指定 Locale确定 (a) 翻译日名、月名等的人类语言,以及 (b) 决定缩写、大写、标点符号、分隔符等问题的文化规范。

ZonedDateTime x = ZonedDateTime.parse( inputX , f );
ZonedDateTime y = ZonedDateTime.parse( inputY , f );

x.toString(): 2016-07-13T17:23:33+02:00[GMT+02:00]

y.toString(): 2016-07-13T17:23:31+02:00[Europe/Paris]

在实际工作中,捕获错误输入时抛出的异常。

比较

使用 isBeforeisAfterisEqual 或方法进行比较。请注意,Comparable::equals 方法实现在行为上有所不同 (read the doc)。

if( x.isBefore( y ) ) {           // BEFORE

} else if( x.isAfter( y ) ) { // AFTER

} else if( x.isEqual( y ) ) { // EQUAL

} else { // UNREACHABLE
… // Handle error condition. Should be unreachable.
}

区域

顺便说一句,您的两个输入使用的格式选择非常糟糕。第一个只有与 UTC 的偏移量,而不是实际时区。第二个带有“CEST”伪区。这种 3-4 个字母的标签在主流媒体中很常见,但不是真正的时区,没有标准化,甚至不是唯一的(!)。

指定 proper time zone name格式为continent/region,如America/Montreal , Africa/Casablanca ,或 太平洋/奥克兰。切勿使用 3-4 个字母的缩写,例如 ESTIST,因为它们不是真正的时区,不是标准化的,甚至不是唯一的( !)。

ZoneId z = ZoneId.of( "America/Montreal" ) ;  

尽可能使用标准 ISO 8601将日期时间值作为文本交换时的格式。 java.time 类在解析/生成字符串时默认使用标准格式。 ZonedDateTime 类通过在方括号中附加时区名称来明智地扩展标准格式,如上例所示。


关于java.time

java.time框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧类 legacy日期时间类,例如 java.util.Date , Calendar , & SimpleDateFormat .

Joda-Time项目,现在在maintenance mode , 建议迁移到 java.time类。

要了解更多信息,请参阅 Oracle Tutorial .并在 Stack Overflow 中搜索许多示例和解释。规范为 JSR 310 .

使用 JDBC driver符合 JDBC 4.2或者稍后,您可以直接与数据库交换 java.time 对象。不需要字符串或 java.sql.* 类。

从哪里获得 java.time 类?

ThreeTen-Extra项目用附加类扩展 java.time。该项目是 future 可能添加到 java.time 的试验场。您可能会在这里找到一些有用的类,例如 Interval , YearWeek , YearQuarter , 和 more .

关于安卓比较日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38356184/

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