我目前的日期格式是: 08/11/2008 00:00
我需要将此输出转换为 2008/11/08 00:00 但是,使用SimpleDateFormat进行了研究,它无法这样做并给我一个完全不同的输出,这里是我的代码如下:
SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyy/MM/dd HH:mm")
Date starting= simpleDateFormat2.parse(startTime);
System.out.println("" + simpleDateFormat2.format(starting) + " real date " + startTime);
我知道我正在解析正确的字符串,因为发生了以下输出:
0014/05/01 00:00 real date 08/11/2008 00:00
我不太确定机械师如何检测到0014/05/01 00:00而不是
2008/11/08 00:00
我期待所有的建议 提前致谢
答案 0 :(得分:8)
您需要做的第一件事是将原始值解析为Date
对象
String startTime = "08/11/2008 00:00";
// This could be MM/dd/yyyy, you original value is ambiguous
SimpleDateFormat input = new SimpleDateFormat("dd/MM/yyyy HH:mm");
Date dateValue = input.parse(startTime);
完成后,您可以按照自己想要的方式格式化dateValue
...
SimpleDateFormat output = new SimpleDateFormat("yyyy/MM/dd HH:mm");
System.out.println("" + output.format(dateValue) + " real date " + startTime);
输出:
2008/11/08 00:00 real date 08/11/2008 00:00
您获得0014/05/01 00:00
的原因SimpleDateFormat
(使用yyyy/MM/dd HH:mm
时)正在使用08
年,11
表示当月2008
{1}}当天,它正在内部滚动值以将值更正为有效日期
答案 1 :(得分:3)
这是因为您解析的源日期字符串格式与SimpleDateFormatter格式不同。不同。您的来源是MM/dd/yyyy HH:mm
格式。将SimpleDateFormat中的字符串更改为MM/dd/yyyy HH:mm
。
在第一次格式化后尝试使用其他格式。
SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("MM/dd/yyyy HH:mm");
//You gotta parse it to a Date before correcting it
Date parsedDate = simpleDateFormat2.parse(startTime);
simpleDateFormat2 = new SimpleDateFormat("yyyy/MM/dd HH:mm")
String newFormatttedDate = simpleDateFormat2.format(parsedDate);
答案 2 :(得分:2)
我想提供现代答案。
DateTimeFormatter currentFormatter = DateTimeFormatter.ofPattern("dd/MM/uuuu HH:mm");
DateTimeFormatter convertedOutputFormatter = DateTimeFormatter.ofPattern("uuuu/MM/dd HH:mm");
String startTime = "08/11/2008 00:00";
LocalDateTime starting = LocalDateTime.parse(startTime, currentFormatter);
System.out.println(starting.format(convertedOutputFormatter));
打印
2008/11/08 00:00
您尝试使用的SimpleDateFormat
课程已经过时且非常麻烦。你经历过但有点麻烦。相反,我正在使用并推荐java.time
,现代Java日期和时间API。
正如其他人所说,你需要使用两个格式化程序,一个用于指定当前格式,另一个用于指定所需格式。
您格式化格式为yyyy/MM/dd HH:mm
的格式化程序将08/11/2008解释为共同时代第8个月的第11个月的第2008天。它不会打扰SimpleDateFormat
默认设置,即11月只有30天,它会继续计入以下几个月和几年,最后是五年半之后的日期(2008年除以365.25)非常接近5.5)。
java.time
吗?如果至少使用 Java 6 ,则可以。
org.threeten.bp
和子包中导入日期和时间类。java.time
。答案 3 :(得分:0)
您正在使用格式08/11/2008 00:00
解析日期yyyy/MM/dd HH:mm
,但此日期不是。