Gui*_*ido 50
如果您使用Apache commons-lang,则可以使用DateUtils来舍入日期:
Date now = new Date();
Date nearestMinute = DateUtils.round(now, Calendar.MINUTE);
Run Code Online (Sandbox Code Playgroud)
Wiz*_*art 26
没有第三方库的方法(虽然可能不那么优雅而且不那么灵活):添加一半字段(按分钟舍入 - 30秒)并将此字段和较低的字段设置为零.
Calendar calendar = ... // assume you already have it with a specified Date value
// 'add' cause changing larger fields if necessary
calendar.add( Calendar.SECOND, 30 );
calendar.set( Calendar.SECOND, 0 );
calendar.set( Calendar.MILLISECOND, 0 );
Run Code Online (Sandbox Code Playgroud)
如果当前值小于30秒,则"添加"时分钟值不会改变.否则,它将增加1.在任何情况下,秒和较低值都归零.所以我们有一个四舍五入.
你可以使用Apache-commons' DateUtils.
import org.apache.commons.lang.time.FastDateFormat;
import org.apache.commons.lang.time.DateFormatUtils;
import org.apache.commons.lang.time.DateUtils;
FastDateFormat dtFormat = DateFormatUtils.ISO_DATETIME_FORMAT;
Date now = new Date( );
Date nearestHour = DateUtils.round( now, Calendar.HOUR );
Date nearestDay = DateUtils.round( now, Calendar.DAY_OF_MONTH );
Date nearestYear = DateUtils.round( now, Calendar.YEAR );
System.out.println( "Now: " + dtFormat.format( now ) );
System.out.println( "Nearest Hour: " + dtFormat.format( nearestHour ) );
System.out.println( "Nearest Day: " + dtFormat.format( nearestDay ) );
System.out.println( "Nearest Year: " + dtFormat.format( nearestYear )
Run Code Online (Sandbox Code Playgroud)
小智 7
要使用 Apache commons-lang 向上/向下舍入,您可以使用以下方法:
DateUtils.ceiling(date, Calendar.HOUR)DateUtils.truncate(date, Calendar.HOUR)DateUtils.round(date, Calendar.HOUR) 参见示例:
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
String sDate1 = "11-05-2019 19:01:00";
Date date1 = formatter.parse(sDate1);
System.out.println(DateUtils.round(date1, Calendar.HOUR)); // Sat May 11 19:00:00 MSK 2019
System.out.println(DateUtils.truncate(date1, Calendar.HOUR)); // Sat May 11 19:00:00 MSK 2019
System.out.println(DateUtils.ceiling(date1, Calendar.HOUR)); // Sat May 11 20:00:00 MSK 2019
String sDate2 = "11-05-2019 19:29:00";
Date date2 = formatter.parse(sDate2);
System.out.println(DateUtils.round(date2, Calendar.HOUR)); // Sat May 11 19:00:00 MSK 2019
System.out.println(DateUtils.truncate(date2, Calendar.HOUR)); // Sat May 11 19:00:00 MSK 2019
System.out.println(DateUtils.ceiling(date2, Calendar.HOUR)); // Sat May 11 20:00:00 MSK 2019
String sDate3 = "11-05-2019 19:30:00";
Date date3 = formatter.parse(sDate3);
System.out.println(DateUtils.round(date3, Calendar.HOUR)); // Sat May 11 20:00:00 MSK 2019
System.out.println(DateUtils.truncate(date3, Calendar.HOUR)); // Sat May 11 19:00:00 MSK 2019
System.out.println(DateUtils.ceiling(date3, Calendar.HOUR)); // Sat May 11 20:00:00 MSK 2019
String sDate4 = "11-05-2019 19:31:00";
Date date4 = formatter.parse(sDate4);
System.out.println(DateUtils.round(date4, Calendar.HOUR)); // Sat May 11 20:00:00 MSK 2019
System.out.println(DateUtils.truncate(date4, Calendar.HOUR)); // Sat May 11 19:00:00 MSK 2019
System.out.println(DateUtils.ceiling(date4, Calendar.HOUR)); // Sat May 11 20:00:00 MSK 2019
String sDate5 = "11-05-2019 19:59:00";
Date date5 = formatter.parse(sDate5);
System.out.println(DateUtils.round(date5, Calendar.HOUR)); // Sat May 11 20:00:00 MSK 2019
System.out.println(DateUtils.truncate(date5, Calendar.HOUR)); // Sat May 11 19:00:00 MSK 2019
System.out.println(DateUtils.ceiling(date5, Calendar.HOUR)); // Sat May 11 20:00:00 MSK 2019
Run Code Online (Sandbox Code Playgroud)
这是 Java8+ 的答案:
public static Instant roundHalfUp(Instant instant, TemporalUnit unit) {
return instant.plus(unit.getDuration().dividedBy(2))
.truncatedTo(unit);
}
Run Code Online (Sandbox Code Playgroud)
要将日期四舍五入到分钟,请使用日期->即时->日期转换:
Date.from(roundHalfUp(date.toInstant(), ChronoUnit.MINUTES))
Run Code Online (Sandbox Code Playgroud)