2016-12-23 70 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(); 
相关问题