使用 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
我必须遵循我要打印的时间字符串:“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