【发布时间】:2015-06-04 14:02:49
【问题描述】:
我需要在 Calendar Java 对象中存储一个日期/时间,该日期/时间由今天的日期加上从 HH:mm:ss 格式的字符串解析的时间组成。
我尝试创建一个新的GregorianCalendar 并使用setTime() 来初始化它,结果是调用SimpleDateFormat 的 parse() 方法,但后来我注意到parse() 给我返回了一个Date 对象正确的解析时间,但日期为 1970 年 1 月 1 日。
例如:
String time = "23:32";
String timeFmt = new SimpleDateFormat("HH:mm");
Calendar todaysTime = new GregorianCalendar();
todaysTime.setTime(timeFmt.parse(time));
System.out.println(todaysTime.getTime());
打印:Thu Jan 01 11:32:00 CST 1970
我的预期是:Wed 03 11:32:00 CST 2015
我只能看到一个替代方案:使用今天的日期创建第二个GregorianCalendar,然后通过setYear()、setMonth() 和setDayOfMonth() 手动将年、月和日设置为todaysTime,但我希望有一种更优雅的方式。
您能帮我寻找一种更好的方法来将时间部分解析为Date 对象而不会丢失日期部分吗?
【问题讨论】:
-
你有使用
Date和Calendar吗?如果您可以使用 Joda Time 或 Java 8 的java.time包,那么这个问题和许多其他问题就会变得容易得多。 -
@JonSkeet 我坚持使用 Java 6,但如果我能证明使用 Joda Time 是合理的,我想我可以将它包含在我的库列表中!
-
对。我会强烈建议您这样做 - 使用 Joda Time everywhere 来处理您的时间/日期。您可以将您的值解析为
LocalTime,然后在DateTime或LocalDateTime中使用它就很容易了。不过要提醒一句:如果您使用的是DateTime(即在特定时区),您应该考虑如果结果DateTime不明确或由于 DST 更改而被跳过,您应该怎么做。