【问题标题】:What is the way to set the time value as 00:00:00 using java [closed]使用java将时间值设置为00:00:00的方法是什么[关闭]
【发布时间】:2016-06-09 07:25:45
【问题描述】:

我需要将时间值更改为 0。 我的输入格式为:2016-07-30T06:00:00:000Z 预期结果:2016-07-30 00:00:00 我尝试了一些代码,但它不起作用

final Calendar calendar = Calendar.getInstance();
        calendar.setTimeZone(timezone);
        calendar.setTime(date);
        calendar.set(Calendar.0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);

请提出一些解决方案。 提前致谢。

【问题讨论】:

标签: java


【解决方案1】:

你的线路

calendar.set(Calendar.0); 

是问题所在。

人们经常错误地做

calendar.set(Calendar.HOUR, 0); 

失败了,而

 calendar.set(Calendar.HOUR_OF_DAY, 0); 

是正确的方法

例如此代码有效

Date date = new Date();
final Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
    calendar.set(Calendar.HOUR_OF_DAY, 0);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);
    calendar.set(Calendar.MILLISECOND, 0);
Date zeroedDate = calendar.getTime();  
System.out.println(zeroedDate);

当运行给我时

2016 年 6 月 9 日星期四 00:00:00 新西兰标准时间

【讨论】:

  • 好点,这是一个容易掉入的陷阱!但请注意时区,您将在当地时区获得零小时...
【解决方案2】:

如果您使用的是 Java 8,则可以使用新的日期和时间库:

date.toInstant().truncatedTo(ChronoUnit.DAYS)

这将为您提供正确的瞬间。您可以使用 Date.from(Instant) 工厂方法轻松地将其转换回 Date 实例。

【讨论】:

  • 此答案中的代码是仅在 UTC 中出现的第一天。如果您想在另一个时区开始一天,请使用date.toInstant().atZone( yourZoneIdHere ).toLocalDate().atStartOfDay( yourZoneIdHere )
【解决方案3】:

这是一个如何使用日历的示例

  String months[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug",
    "Sep", "Oct", "Nov", "Dec" };

Calendar calendar = Calendar.getInstance();

System.out.print("Date: ");
System.out.print(months[calendar.get(Calendar.MONTH)]);
System.out.print(" " + calendar.get(Calendar.DATE) + " ");
System.out.println(calendar.get(Calendar.YEAR));

System.out.print("Time: ");
System.out.print(calendar.get(Calendar.HOUR) + ":");
System.out.print(calendar.get(Calendar.MINUTE) + ":");
System.out.println(calendar.get(Calendar.SECOND));

calendar.set(Calendar.HOUR, 10);
calendar.set(Calendar.MINUTE, 29);
calendar.set(Calendar.SECOND, 22);

System.out.print("Updated time: ");
System.out.print(calendar.get(Calendar.HOUR) + ":");
System.out.print(calendar.get(Calendar.MINUTE) + ":");
System.out.println(calendar.get(Calendar.SECOND));
 }
}

所以我希望你摆脱这个

 calendar.setTimeZone(timezone);
 calendar.setTime(date);
 calendar.set(Calendar.0);

并将您的一些代码更改为此

calendar.set(Calendar.HOUR, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);

这应该可以,我还没有测试过。

欲了解更多信息,请点击此处http://www.java2s.com/Code/JavaAPI/java.util/Calendarsetintfieldintvalue.htm

【讨论】:

  • 使用 HOUR 常量不适用于 PM 时间,应该使用 HOUR_OF_DAY 正如@RuanMalans 在他的回答中指出的那样。
  • 啊,好点我忘了 HOUR_OF_DAY
猜你喜欢
  • 2013-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多