如何在Java中将时间设置为零,格式为yyyy-MM-dd HH:mm:ss?

3

我收到一个输入日期字符串,例如:2015-06-02 12:60:30,输出应该是2015-06-02 00:00:00。即如何在给定格式yyyy-MM-dd HH:mm:ss中将HH:mm:ss设置为

6个回答

4

使用yyyy-MM-dd 00:00:00格式代替yyyy-MM-dd HH:mm:ss

这将会把小时、分钟、秒都变成0,而不是实际的值。

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd 00:00:00");
String dateValue = dateFormat.format(new Date());
System.out.println(dateValue);

1
您可以尝试使用以下代码:

calendar.set(Calendar.HOUR_OF_DAY, 0);

类似这样的东西:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar c = Calendar.getInstance();
c.set(Calendar.HOUR, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
System.out.println(sdf.format(c.getTime()));
c.set(Calendar.HOUR_OF_DAY, 0);
System.out.println(sdf.format(c.getTime()));

1
如果您不需要验证输入格式,可以使用正则表达式:
input.replaceAll("\d\d:\d\d:\d\d", "00:00:00")

然而,请注意,这种转换并不一定产生一个有效的时间:如果您要转换的日期及其时区不允许午夜,则午夜可能无效,因此这可能不会产生有效的时间。(亚洲/加沙的夏令时开始就是经常被引用的例子)。

1
Calendar cal = Calendar.getInstance(); 
cal.set(Calendar.YEAR,2015);
cal.set(Calendar.MONTH,6); 
cal.set(Calendar.HOUR_OF_DAY,2);
cal.set(Calendar.MINUTE,0); 
cal.set(Calendar.SECOND,0);
cal.set(Calendar.MILLISECOND,0);

Date d = cal.getTime();

并且你可以使用以下方式进行格式化:

SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String formatted = sdFormat.format(cal.getTime());

1

只需提供您想保留的“日期”部分的格式,例如...

String text = "2015-06-02 12:60:30";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf.parse(text);

SimpleDateFormat out = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(out.format(date));

输出...

2015-06-02 00:00:00

这是一个小技巧,实际上在 JavaDocs 中有描述

从给定字符串的开头解析文本以生成日期。该方法可能不使用给定字符串的整个文本

我添加了强调


很高兴能帮到你 ;) - MadProgrammer

1
尝试这个。
 SimpleDateFormat sm = new SimpleDateFormat("yyyy-MM-dd");
   String strDate = sm.format(myDate);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接