用java获取今天的日期 - 我已经尝试了常规方法

2022-09-03 16:21:32

我需要今天的日期 - 其他任何内容都为零 (“ 05/06/08 00:00:00 ”)

我试过了

Calendar calendar = Calendar.getInstance(); 
calendar.set(Calendar.HOUR, 0);        
Date date1 = calendar.getTime();                             
System.out.println(date1);

运行:(这严重搞砸了)

如果计算机上的小时数<中午 12:00: 星期日 三月 08 00:44:39 IST 2009

如果计算机上的小时数在中午 12:00 >: 星期日 三月 08 12:46:53 IST 2009

所以我放弃了这个。

所有 Date 的 setter 都已弃用(除了 epoch 时间) - 所以我也不想使用它们

我唯一能想到的就是

Calendar calendar = Calendar.getInstance();     
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
String sDate = dateFormat.format(calendar.getTime());
Date today = dateFormat.parse(sDate);

但这是一个如此蹩脚的代码,我不能让自己写它。

还有其他选择吗?

谢谢!


答案 1

我用这个:

public static Date startOfDay(Date date) {
   Calendar dCal = Calendar.getInstance();
   dCal.setTime(date);
   dCal.set(Calendar.HOUR_OF_DAY, 0);
   dCal.set(Calendar.MINUTE, 0);
   dCal.set(Calendar.SECOND, 0);
   dCal.set(Calendar.MILLISECOND, 0);

   return dCal.getTime();
 }

答案 2

我对Java日期/时间问题的标准建议是:不要使用.使用Joda Time。这样,您就可以将日期表示为日期(没有关联的时区),而不是日期/时间。或者,您可以使用DateMidnight,如果这是您想要表示的。(注意没有午夜的时区和日期的组合...)java.util.{Calendar,Date}

您需要使用什么?如果你能逃脱改变使用Joda整个过程,那就太好了。否则,您可以使用Joda做您想要做的事情,然后在真正需要时转换为毫秒(然后转换为)。Datejava.util.Date

(Michael在使用/时的解决方案很好,如果你真的想坚持在一个破碎的API中......但我不能夸大乔达有多好...)DateCalendar