【问题标题】:how to ceil and floor a Calendar Date by 10 minnutes?如何将日历日期设置为上限和下限 10 分钟?
【发布时间】: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");
        }
    }

这个解决方案很好用,但是太丑了。我不知道是否有更好更短的解决方案来做同样的工作。

【问题讨论】:

  • 我建议你不要使用DateSimpleDateFormatCalendar。这些类设计不佳且早已过时,SimpleDateFormat 特别是出了名的麻烦。而是使用来自java.time, the modern Java date and time APILocalDateTimeDateTimeFormatter
  • 我确信使用前面提到的时间包有更好的方法。它可能涉及一些整数数学运算,例如(minutes/10)*10So minutes = 46, (46/10)*10 = 40

标签: java date calendar java-9


【解决方案1】:

java.time

我建议您使用现代 Java 日期和时间 API java.time 来处理您的时间问题。

    String timeString = "09:56";
    
    LocalTime time = LocalTime.parse(timeString);
    int minute = time.getMinute();
    if (minute % 10 != 0) {
        // truncate to whole 10 minutes
        LocalTime firstSuggestedTime = time.withMinute(minute / 10 * 10);
        LocalTime secondSuggestedTime = firstSuggestedTime.plusMinutes(10);
        System.out.format("Not a valid time; try with %s or %s.%n",
                firstSuggestedTime, secondSuggestedTime);
    }

这个例子的输出是:

不是一个有效的时间;尝试 09:50 或 10:00。

链接

Oracle tutorial: Date Time 解释如何使用 java.time。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-10
    • 1970-01-01
    • 2014-10-29
    • 1970-01-01
    • 2014-05-06
    相关资源
    最近更新 更多