【发布时间】:2021-04-14 16:28:43
【问题描述】:
有一种更好的方法可以将日期时间按以下代码的十分钟四舍五入(ceil 和 floor):
public void hintOfTime() {
Date orario = new SimpleDateFormat("hh:mm").parse(usaServizio_standard.setStr());
// I have skipped the try catch for an easy read
Calendar calendar = GregorianCalendar.getInstance();
calendar.setTime(orario);
int minutes = calendar.get(Calendar.MINUTE);
if(minutes>=1 && minutes<=9) {
usaServizio_standard.hint("not valid date","Try with: "+ calendar.get(Calendar.HOUR+1)+":00 or "+calendar.get(Calendar.HOUR+1)+":10");
}else if(minutes>=11 && minutes<=19) {
usaServizio_standard.hint("not valid date","Try with: "+ calendar.get(Calendar.HOUR+1)+":10 or "+calendar.get(Calendar.HOUR+1)+":20");
}else if(minutes>=21 && minutes<=29) {
usaServizio_standard.hint("not valid date","Try with: "+ calendar.get(Calendar.HOUR+1)+":20 or "+calendar.get(Calendar.HOUR+1)+":30");
}else if(minutes>=31 && minutes<=39) {
usaServizio_standard.consiglio("not valid date","Try with: "+ calendar.get(Calendar.HOUR+1)+":30 or "+calendar.get(Calendar.HOUR+1)+":40");
}else if(minutes>=41 && minutes<=49) {
usaServizio_standard.consiglio("not valid date","Try with "+ calendar.get(Calendar.HOUR+1)+":40 or "+calendar.get(Calendar.HOUR+1)+":50");
}else {
usaServizio_standard.hint("not valid date","Try with"+ calendar.get(Calendar.HOUR+1)+":50 or "+calendar.get(Calendar.HOUR+2)+":00");
}
}
这个解决方案很好用,但是太丑了。我不知道是否有更好更短的解决方案来做同样的工作。
【问题讨论】:
-
我建议你不要使用
Date、SimpleDateFormat和Calendar。这些类设计不佳且早已过时,SimpleDateFormat特别是出了名的麻烦。而是使用来自java.time, the modern Java date and time API 的LocalDateTime和DateTimeFormatter。 -
我确信使用前面提到的时间包有更好的方法。它可能涉及一些整数数学运算,例如
(minutes/10)*10。So minutes = 46, (46/10)*10 = 40