为了账号安全,请及时绑定邮箱和手机立即绑定

如何将两个不同的字符串日期转换为单个日期格式

如何将两个不同的字符串日期转换为单个日期格式

繁华开满天机 2023-07-28 16:29:25
我有两个字符串想要转换为特定的日期时间格式,以便我可以进行比较。我遇到的问题是它在解析中出错并出现异常,我想知道我是否做错了什么。想问将两个不同的字符串日期转换为单个日期格式的最佳方法是什么SimpleDateFormat localDateFormat = new SimpleDateFormat("yyyy dd mm - HH:mm:ss");         String firstDateString= "11 May 2018 21:03:51 GMT";         String secondDateString= "dataStore.get("2018-05-11T21:03:51Z";         Date firstDateFormat =localDateFormat.parse(firstDateString);         Date secondDateFormat =localDateFormat.parse(secondDateString);
查看完整描述

3 回答

?
慕哥6287543

TA贡献1831条经验 获得超10个赞

我遇到的问题是它在解析中出错并出现异常,我想知道我是否做错了什么。


=> 是的,你确实在这样做。您首先需要将日期解析为实际格式,然后将其格式化为所需的格式。


例如:用于解析和格式化2018-05-11T21:03:51Z


DateFormat originalFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:MM:SS'z'", Locale.ENGLISH);

DateFormat targetFormat = new SimpleDateFormat("yyyy dd mm - HH:mm:ss");

Date date = originalFormat.parse("2018-05-11T21:03:51Z");

String formattedDate = targetFormat.format(date);  // 2018 05 11 - 21:03:51


查看完整回答
反对 回复 2023-07-28
?
动漫人物

TA贡献1815条经验 获得超10个赞

java.time

    DateTimeFormatter firstFormatteer

            = DateTimeFormatter.ofPattern("d MMM uuuu H:mm:ss z", Locale.ENGLISH);


    String firstDateString = "11 May 2018 21:03:51 GMT";

    String secondDateString = "2018-05-11T21:03:51Z";


    Instant firstInstant = firstFormatteer.parse(firstDateString, Instant::from);

    Instant seoncdInstant = Instant.parse(secondDateString);


    System.out.println("The strings are parsed into " + firstInstant + " and " + seoncdInstant);

输出是:


字符串被解析为 2018-05-11T21:03:51Z 和 2018-05-11T21:03:51Z


来自两个服务的字符串具有两种不同的格式,您能做的最好的事情就是以两种不同的方式处理它们。首先,定义一个与格式匹配的格式化程序。第二个是 ISO 8601 格式。Instant解析此格式时不需要任何显式格式化程序,因此这里我们不需要定义格式化程序。


要进行比较,例如:


    if (firstInstant.isBefore(seoncdInstant)) {

        System.out.println("The first date and time comes first");

    } else if (firstInstant.equals(seoncdInstant)) {

        System.out.println("The date and time is the same");

    }

日期和时间相同


类Instant是类的现代替代品Date,它代表了一个时刻。


这个Date类设计得很糟糕,而且SimpleDateFormat非常麻烦,幸运的是它们都已经过时了。我建议您避免使用它们并使用 java.time(现代 Java 日期和时间 API)。


查看完整回答
反对 回复 2023-07-28
?
翻阅古今

TA贡献1780条经验 获得超5个赞

这里:

SimpleDateFormat localDateFormat = new SimpleDateFormat("yyyy dd mm - HH:mm:ss");

该格式表示:4 年数字空格、2 天数字空格、2 个月数字 DASH 等等。

事情是:你的字符串日期都不是:

    "11 May 2018 21:03:51 GMT"
    "2018-05-11T21:03:51Z"

看起来像那样。第一个是“dd M yyy ...”(不以年份开头),第二个使用“-”而不是“”作为初始日期的分隔符。

查看完整回答
反对 回复 2023-07-28
  • 3 回答
  • 0 关注
  • 103 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信