将字符串转换为日期并与 Java 中的 LocalDateTime.now() 进行比较

问题描述 投票:0回答:1

字符串数据位于之前以“Mon Jan 08 18:55:57 GMT+05:30 2024”格式存储的文件中。我使用以下代码来转换字符串以获取值“08 Jan 2024”

Boolean goahead = false;
SimpleDateFormat formatter = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy");
SimpleDateFormat formatterOut = new SimpleDateFormat("dd MMM yyyy");
try {
  pundate = formatter.parse(punchDate);
  System.out.println(pundate);
  System.out.println(formatterOut.format(pundate));
} catch (ParseException e) {
   e.printStackTrace();
}

String convertedtodaydate = dateFormater(String.valueOf(LocalDateTime.now()), "dd MMM yyyy", "yyyy-MM-dd"); //Output is 16 Feb 2024

try {
   if(Objects.requireNonNull(sdf.parse(convertedtodaydate)).after(sdf.parse(formatterOut.format(pundate)))) {
     goahead = true;
   }
  } catch (ParseException e) {
            e.printStackTrace();
  }

我得到的错误是

W/System.err: java.text.ParseException: Unparseable date: "16 Feb 2024"

有没有更简单的方法来检查存储的日期是否早于当前日期?

java android date compare
1个回答
0
投票

永远不要使用有严重缺陷的遗留类,例如

SimpleDateFormat
Date
Calendar
。仅使用 java.nime 类。

永远不要打电话给

LocalDateTime.now
。我无法想象这是最佳选择的场景。该类无法表示某个时刻,因为它缺少时区或偏移量的上下文。

字符串数据位于之前以“Mon Jan 08 18:55:57 GMT+05:30 2024”格式存储的文件中。

切勿使用本地化格式以文本方式存储日期时间值。仅使用 ISO 8601 格式进行数据存储和数据交换。

使用

DateTimeFormatter
解析文本。

DateTimeFormatter f = DateTimeFormatter.ofPattern( "EEE MMM dd HH:mm:ss OOOO uuuu" ) ;
String input = "Mon Jan 08 18:55:57 GMT+05:30 2024" ;
ZonedDateTime zdt = ZonedDateTime.parse( input , f ) ;
© www.soinside.com 2019 - 2024. All rights reserved.