2016-12-23 68 views
0

當天有沒有辦法使用下面的SimpleDateFormat:的SimpleDateFormat設置瞭解析日期

final SimpleDateFormat simpleDateFormatHour = new SimpleDateFormat("HH:mm:ss z"); 

和調用時:

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

的日期對象返回當前日期?

對於這些例子,它將返回:

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去:

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

如果你想包括一個時區,您可以使用ZonedDateTime

0

構造另一個SimpleDateFormat打印今天的日期:

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

(這裏要小心:你可能想設置時區的SimpleDateFormat,爲「今天」,是在不同的時區不同)。

更新的日期格式,包括年,月,日:

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss z"); 

然後在前面加上日期字符串你想要的日期:

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

採用靈活的默認值,更好的解決方案(今天而不是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] 

但是,我仍然看到一個小錯誤,這個錯誤與這個事實有關,因爲這個代碼在解析真實區域之前對使用區域做了硬連線的假設,所以請小心處理。請記住,當前日期取決於區域。但也許你只需要處理一個只有日本時間被用戶使用的場景。

提示:你也可以分兩步進行解析。第一步用任何一種固定的默認日期來獲取要解析的文本的區域信息。然後,您可以使用此區域信息獲取上述建議的解決方案。一個尷尬但安全的程序。

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(); 
相關問題