ための現在の日には、以下のSimpleDateFormatを使用するには、どのような方法があります設定しますか?てSimpleDateFormatは、解析された日付
これらたとえば、それが返されます:
Thu Jan 01 05:32:21 EET 1970
とされていない:
<<today>> 05:32:21 EET <<currentYear>>
私が必要として。
ための現在の日には、以下のSimpleDateFormatを使用するには、どのような方法があります設定しますか?てSimpleDateFormatは、解析された日付
これらたとえば、それが返されます:
Thu Jan 01 05:32:21 EET 1970
とされていない:
<<today>> 05:32:21 EET <<currentYear>>
私が必要として。
いいえ、SimpleDateFormat
は入力文字列の日付を明示する必要があります。あなたは、Java 8を使用している場合は、LocalDateTime
に行くことができます:あなたはタイムゾーンを含めたい場合は、あなたがZonedDateTime
を使用することができます
LocalDateTime localDateTime = LocalDate.now().atTime(5, 32, 21);
。
今日の日付を印刷するには、別のSimpleDateFormat
を構築:
String today = new SimpleDateFormat("yyyy/MM/dd").print(new Date());
(ここで注意してください:「今日は」異なるタイムゾーンに異なっているようあなたは、SimpleDateFormat
にタイムゾーンを設定したい場合があります)。 (
simpleDateFormat.parse(today + " " + "12:32:21 JST");
柔軟なデフォルト値を使用して、よりよい解決策:
更新日付形式は年、月、日含めます
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss z");
をそして、あなたが日付と日付文字列を付加します今日では1970-01-01の代わりに)Java-8に、新しい組み込み日付時刻ライブラリがパッケージjava.time
にあります。
String input = "12:32:21 JST";
String pattern = "HH:mm:ss z";
LocalDate today = LocalDate.now(ZoneId.of("Asia/Tokyo"));
DateTimeFormatter dtf =
new DateTimeFormatterBuilder().parseDefaulting(ChronoField.YEAR, today.getYear())
.parseDefaulting(ChronoField.MONTH_OF_YEAR, today.getMonthValue()).parseDefaulting(
ChronoField.DAY_OF_MONTH,
today.getDayOfMonth()
).appendPattern(pattern).toFormatter(Locale.ENGLISH);
ZonedDateTime zdt = ZonedDateTime.parse(input, dtf);
System.out.println(zdt); // 2016-12-23T12:32:21+09:00[Asia/Tokyo]
しかし、私はまだ、このコードが実際のゾーンを解析する前に使用済みのゾーンについてハードワイヤードな仮定をしているので、小さなバグがあるので気をつけて処理してください。現在の日付はゾーンによって異なることに注意してください。しかし、おそらく日本の時間だけがユーザーによって使用されるシナリオを処理する必要があります。
ヒント:2つのステップで解析することもできます。解析するテキストのゾーン情報を取得するために、任意の種類の固定デフォルトの日付を持つ最初のステップ。そして、上記の提案されたソリューションにこのゾーン情報を使用することができます。扱いにくいが安全な手順。
あなただけの一年と一日を変更したい場合は、このコードを使用することができます
final SimpleDateFormat simpleDateFormatHour = new SimpleDateFormat("HH:mm:ss z");
Date date = simpleDateFormatHour.parse("12:32:21 JST");
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.YEAR, Calendar.getInstance().get(Calendar.YEAR));
calendar.set(Calendar.DAY_OF_YEAR, Calendar.getInstance().get(Calendar.DAY_OF_YEAR));
date = calendar.getTime();
'SimpleDateFormat'は、デフォルトの日付をサポートしていない、または他の言葉で:1970-01-01は固定のデフォルトでありますこのフォーマッタの日付。柔軟性を望むなら、Java-8で 'DateTimeFormatter'を使うことができます。 –