次の日付文字列をyyyy-MM-dd HH:mm:ss形式でutc時刻に変換するだけのサンプルコードブロックまたは提案が必要です。カスタム日付文字列(am/pmあり)をUTC日付時刻に変換する
サンプル日付文字列:2017年11月23日9時44分午前
plsは重複し
次の日付文字列をyyyy-MM-dd HH:mm:ss形式でutc時刻に変換するだけのサンプルコードブロックまたは提案が必要です。カスタム日付文字列(am/pmあり)をUTC日付時刻に変換する
サンプル日付文字列:2017年11月23日9時44分午前
plsは重複し
SimpleDateFormat's javadocすべてリストとしてこれを考えるいけないが、このような類似した問題があるが、私のテストデータは午前/ pm.Soでありますam/pmマーカーの "a"を含むオプション。あなたの場合
、次のものが必要です。
SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy hh:mm:ssa")
または "MM/dd/yyyy hh:mm a"に関する質問がなかったことに気付かなかった。 – suvartheec
ありがとう。修正されました:) –
以下のサンプルコードが正しく変換を行う必要があります。
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateConversion {
public static void main(String[] argv) {
SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy hh:mma");
SimpleDateFormat OutputFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String sampleDateString = "11/23/2017 09:44am";
try {
Date convertDate = formatter.parse(sampleDateString);
System.out.println(OutputFormatter.format(convertDate));
} catch (ParseException e) {
e.printStackTrace();
}
}
}
これは、解析する日付文字列を宣言するためのものです。まず
SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy hh:mma");
と出力日付だけでなく
SimpleDateFormat OutputFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
あなたは適切なパターンでSimpleDateFormat
を作成する必要があります。このクラスは、あなたはjava.util.Date
(more info here)にあなたの文字列を解析するのに役立ちます:
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yy hh:mma");
あなたの元の文字列、日付は特別なタイムゾーンにある場合、あなたは、このタイムゾーンを使用するようにパーサに指示する必要があります。
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yy hh:mma", Locale.ENGLISH);
は、その後、あなたは、現在までに文字列を解析する必要があります。Finnaly
Date d = sdf.parse("11/23/2017 09:44am");
あなたはUTCにtimezoned日付を変換する必要があります。
完全なコードスニペットを怒鳴る見つけてください:
public static void main(String[] args) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yy hh:mma", Locale.ENGLISH);
Date d = sdf.parse("11/23/2017 09:44am");
System.out.println(toUtcZonedDateTime(d));
}
public static ZonedDateTime toUtcZonedDateTime(final Date date) {
if (date == null) {
return null;
}
final ZoneId utcZone = ZoneOffset.UTC;
return ZonedDateTime.ofInstant(date.toInstant(), utcZone);
}
出力:
2017-11-23T08:44Z
解決していただきありがとうございます。しかし、変換されたutcの日付を文字列にしたいのですが、それを行う方法はありますか? – user2392695
java.util.DateをStringに変換する2つのオプションがあります。 1つ目は、使用可能な日付にtoString()メソッドを使用することです。 2番目のオプションは、SimpleDateFormatを作成し、それを使用することです:String dateStr = sdf.format(date) – zappee
あなたが使用することができますJavaの8 time
パッケージ:
String input = "11/23/2017 09:44am";
String format = "MM/dd/yyyy hh:mma";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
LocalDateTime date = LocalDateTime.parse(input, formatter);
System.out.printf("%s%n", date);
しかし、問題は次のとおりです。この小文字の「am」のためにDateTimeParseException
がスローされます。
私は文書を調べましたが、小文字の 'am'または 'pm'をmeridiemの指定子として解析する標準的な方法はありませんでした。
You'll end up manually replacing them:
input = input.replace("AM", "am").replace("PM","pm");
コメントで@OleVVで述べたように、あなたがDateTimeFormatterBuilder
を使用して構文解析で大文字と小文字を区別しないように指定することができます
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.parseCaseInsensitive()
.appendPattern(format)
.toFormatter();
次に、あなたがすることができますこのフォーマッタをLocalDateTime.parse
メソッドの引数として使用してください。
上記のポストprovides a solutionの別の回答では、AM/PM記号を小文字のバリアントで上書きできます。興味深いことに
SimpleDateFormat
んサポート小文字の午前/午後の解析。
小文字のam/pmを処理する方法:(1)解析する前に文字列全体を大文字に変換するだけです(他の文字、これは無害です)。 (2)「DateTimeFormatterBuilder」を使用して、(a)シンプル:大文字と小文字を区別しない解析を指定する(b)AMとPMに使用するリテラル文字列を指定する。 –
明示的なロケールを指定することをお勧めします。 AMとPMは英語で呼ばれ、他のランゲージは他の名前を持つことがあるので、ロケールが指定されているすべてのコンピュータでコードが機能しない可能性があります。 –
これはそれを行う必要があります。DateTimeFormatter.ofPattern( "mm/dd/yyyy hh:mm a"); –
@priyadarshiswain「M」、「分」は「m」、「Minute in hour」は – suvartheec
[Java8 DateTimeFormatter am/pm]と重複している可能性があります(https://stackoverflow.com/questions/38250379/java8-datetimeformatter-am- pm)。質問を重複して考えないように頼んだことは分かっていますが、リンクされた質問には小文字のam/pmも含まれているので、受け入れられた答えはそれを解決します。 –