私の現在の日付形式は:08/11/2008 00:00
この出力を2008/11/0800: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/0100:00を検出したメカニズムについてはよくわかりません
2008/11/08 00:00
私はすべての提案を楽しみにしています事前に感謝します
最初に行う必要があるのは、元の値を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
その日は、値の内部ローリングを実行して、値を有効な日付に修正します
私は現代の答えに貢献したいと思います。
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日付と時刻のAPIであるJava.time
を使用して推奨しています。
他の人が言っているように、2つのフォーマッターを使用する必要があります。1つは現在のフォーマットを指定するためのもので、もう1つは目的のフォーマットを指定するためのものです。
フォーマットパターンyyyy/MM/dd HH:mm
のフォーマッタは、2008年8月11日を西暦8年目の11か月目の2008日として解釈しました。 11月は30日しかないというデフォルト設定では、SimpleDateFormat
を邪魔することはなく、次の月と年にカウントを続け、5年半後の日付になります(2008をで割った値) 365.25は5.5に非常に近いです)。
Java.time
を使用できますか?少なくともJava 6を使用している場合は、可能です。
org.threeten.bp
とサブパッケージから日付と時刻のクラスをインポートしてください。Java.time
の使用方法を説明します。これは、解析したソースの日付文字列が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);
日付を解析しています08/11/2008 00:00
形式はyyyy/MM/dd HH:mm
しかし、この日付ではないこの形式では。