2016-12-23 5 views
0

ための現在の日には、以下のSimpleDateFormatを使用するには、どのような方法があります設定しますか?てSimpleDateFormatは、解析された日付

これらたとえば、それが返されます:

Thu Jan 01 05:32:21 EET 1970 

とされていない:

<<today>> 05:32:21 EET <<currentYear>> 

私が必要として。

+1

'SimpleDateFormat'は、デフォルトの日付をサポートしていない、または他の言葉で:1970-01-01は固定のデフォルトでありますこのフォーマッタの日付。柔軟性を望むなら、Java-8で 'DateTimeFormatter'を使うことができます。 –

答えて

2

いいえ、SimpleDateFormatは入力文字列の日付を明示する必要があります。あなたは、Java 8を使用している場合は、LocalDateTimeに行くことができます:あなたはタイムゾーンを含めたい場合は、あなたがZonedDateTimeを使用することができます

LocalDateTime localDateTime = LocalDate.now().atTime(5, 32, 21); 

0

今日の日付を印刷するには、別のSimpleDateFormatを構築:

String today = new SimpleDateFormat("yyyy/MM/dd").print(new Date()); 

(ここで注意してください:「今日は」異なるタイムゾーンに異なっているようあなたは、SimpleDateFormatにタイムゾーンを設定したい場合があります)。 (

simpleDateFormat.parse(today + " " + "12:32:21 JST"); 
1

柔軟なデフォルト値を使用して、よりよい解決策:

更新日付形式は年、月、日含めます

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つのステップで解析することもできます。解析するテキストのゾーン情報を取得するために、任意の種類の固定デフォルトの日付を持つ最初のステップ。そして、上記の提案されたソリューションにこのゾーン情報を使用することができます。扱いにくいが安全な手順。

あなただけの一年と一日を変更したい場合は、このコードを使用することができます
0

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(); 
関連する問題