Convert Time-String using joda-time [duplicate]

余生颓废 提交于 2019-12-12 01:46:30

问题


I have to following time-string: "23.02.2015 14:06:30 +01:00" which I want to print. The printed result should be: "23.02.2015 15:06:30". After some research I just found a solution which I dont think of to be a good idea. Perhabs anyone of you has some conclusions on how to do this right? The conversion should be done with joda-time. Thanks in advance.

** Update due to explaining difference for the mentioned dublicate: My first approach was just like mentioned in Java : how to add 10 mins in my Time to add or remove the hours manually. What I tried to underline is that I dont think of this as a good idea because this could be dangerous if the input string will change (much space for possible errors). So I was wondering if joda-time has some functionality that would make my life easier adn which I didnt notice so far.


回答1:


You can use 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));
    }

And the output is;

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

Result date isn't wrong, for more information about this subject please look here.

For fixed dates, I added time zone with 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));
    }

And the output is ;

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



回答2:


I also have noticed this strange situation when working and converting to Joda Time. What I did is just substract one hour from the Joda Time like this:

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

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


来源:https://stackoverflow.com/questions/28674956/convert-time-string-using-joda-time

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!