使用joda-time转换Time-String

时间:2015-02-23 13:32:04

标签: java jodatime

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分: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