使用 joda-time 转换时间字符串

Convert Time-String using joda-time

我必须遵循我要打印的时间字符串:“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 中提到的那样,手动添加或删除小时数。我试图强调的是,我认为这不是一个好主意,因为如果输入字符串发生变化(可能会发生很多 space 错误),这可能很危险。所以我想知道 joda-time 是否有一些功能可以让我的生活更轻松,而我到目前为止还没有注意到。

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

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

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

您可以使用 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