【问题标题】:Convert Time-String using joda-time [duplicate]使用 joda-time 转换时间字符串 [重复]
【发布时间】:2015-02-24 20:25:57
【问题描述】:

我必须遵循我想要打印的时间字符串:“23.02.2015 14:06:30 +01:00”。打印结果应为:“23.02.2015 15:06:30”。 经过一些研究,我刚刚找到了一个我认为不是一个好主意的解决方案。也许你们中的任何人都对如何正确地做到这一点有一些结论?转换应使用 joda-time 完成。 提前致谢。

** 由于对上述重复项的解释差异而进行了更新: 我的第一种方法就像在Java : how to add 10 mins in my Time 中提到的那样手动添加或删除时间。我试图强调的是,我不认为这是一个好主意,因为如果输入字符串会改变(可能的错误空间很大),这可能会很危险。所以我想知道 joda-time 是否有一些功能可以让我的生活更轻松,但到目前为止我还没有注意到。

【问题讨论】:

  • 您的解决方案是什么?你为什么不认为这是个好主意?
  • "23.02.2015 14:06:30 +01:00" 与 "23.02.2015 15:06:30 +02:00" 是同一时间(即时),所以你想操纵时区偏移?您是否理解必须减去正偏移量才能获得 UTC 时间?
  • 更新了我的问题并添加了一些关于我到目前为止所做的解释

标签: java jodatime


【解决方案1】:

你可以使用DateTime class plusxx() methods;

public static void main(String[] args) {
        String dateTime = "23.02.2015 14:06:30 +01:00";
        DateTimeFormatter dtf = DateTimeFormat.forPattern("dd.MM.yyyy HH:mm:ss Z");

        DateTime jodatime = dtf.parseDateTime(dateTime);
        DateTimeFormatter dtfOut = DateTimeFormat.forPattern("dd.MM.yyyy HH:mm:ss");
        System.out.println(dtfOut.print(jodatime));


        DateTime resultDateTime = jodatime.plusHours(1);
        System.out.println(dtfOut.print(resultDateTime));
    }

输出是;

23.02.2015 08:36:30
23.02.2015 09:36:30

结果日期没有错,有关此主题的更多信息,请查看here

对于固定日期,我添加了withZone( DateTimeZone.forID( "Europe/Prague" ) 的时区;

public static void main(String[] args) {
        String dateTime = "23.02.2015 14:06:30 +01:00";
        DateTimeFormatter dtf = DateTimeFormat.forPattern("dd.MM.yyyy HH:mm:ss Z");

        DateTime jodatime = dtf.withZone( DateTimeZone.forID( "Europe/Prague" ) ).parseDateTime(dateTime);
        DateTimeFormatter dtfOut = DateTimeFormat.forPattern("dd.MM.yyyy HH:mm:ss");
        System.out.println(dtfOut.withZone( DateTimeZone.forID( "Europe/Prague" ) ).print(jodatime));


        DateTime resultDateTime = jodatime.plusHours(1);
        System.out.println(dtfOut.withZone( DateTimeZone.forID( "Europe/Prague" ) ).print(resultDateTime));
    }

输出是;

23.02.2015 14:06:30
23.02.2015 15:06:30

【讨论】:

  • 嗨,谢谢你的帖子。那么除了手动添加/删除时间之外,没有其他解决方案了吗?
  • 这个的常用用法是用plusxxx的方法,当然你也可以试试其他的方法不过我觉得是最简单的一种。
  • 好的,谢谢你的回答。
  • 不客气,很高兴为您提供帮助。
【解决方案2】:

我在工作和转换为Joda Time 时也注意到了这种奇怪的情况。我所做的只是从Joda Time 中减去一个小时,如下所示:

DateTime dt1 = new DateTime([YOUR_JAVA.UTIL.DATE]);

Date result = new Date(dt1).minus(Seconds.seconds(3600)).getSeconds() * 1000);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-24
    • 2011-02-12
    • 1970-01-01
    • 2011-09-09
    • 1970-01-01
    • 2013-03-04
    • 2017-11-13
    • 2012-09-12
    相关资源
    最近更新 更多