【问题标题】:Parse Time into Calendar without losing Date part将时间解析为日历而不丢失日期部分
【发布时间】: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 对象而不会丢失日期部分吗?

【问题讨论】:

  • 使用DateCalendar吗?如果您可以使用 Joda Time 或 Java 8 的 java.time 包,那么这个问题和许多其他问题就会变得容易得多。
  • @JonSkeet 我坚持使用 Java 6,但如果我能证明使用 Joda Time 是合理的,我想我可以将它包含在我的库列表中!
  • 对。我会强烈建议您这样做 - 使用 Joda Time everywhere 来处理您的时间/日期。您可以将您的值解析为LocalTime,然后在DateTimeLocalDateTime 中使用它就很容易了。不过要提醒一句:如果您使用的是 DateTime(即在特定时区),您应该考虑如果结果 DateTime 不明确或由于 DST 更改而被跳过,您应该怎么做。

标签: java parsing datetime


【解决方案1】:

你可以这样做:

Date parsedDate = SimpleDateFormat.getInstance().parse(time);
Calendar instance = Calendar.getInstance();
instance.setTime( parsedDate );

Calendar result = Calendar.getInstance();
result.set( Calendar.HOUR_OF_DAY, instance.get( Calendar.HOUR_OF_DAY ) );
result.set( Calendar.MINUTE, instance.get( Calendar.MINUTE ) );

【讨论】:

  • 与我的想法相比,这似乎是一种更短的方法。但是,我仍然需要使用第二个 Calendar 对象来存储解析时间,然后将该解析时间设置为原始 Calendar 对象。
猜你喜欢
  • 2021-05-09
  • 2023-04-05
  • 2013-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多