我必须遵循时间字符串:" 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是否有一些功能可以让我的生活变得更轻松,到目前为止我没有注意到。
答案 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