以30分钟的时间间隔划分24小时

时间:2013-01-10 06:01:37

标签: java date datetime

我想知道如何循环播放日期/时间或任何类型的变量,每30分钟从00:00到24:00?

所以我需要一个以24HR格式显示时间的变量(01:00,09:00),每次我循环播放时间,加上30分钟的时间?然后我需要在字符串中使用此值。

时间需要从凌晨00:00开始,并以24:00结束。

任何想法我应该如何使用它?

output should be like this - 00:00 00:30 01:00 ....24:00

4 个答案:

答案 0 :(得分:10)

可能有点过度杀戮,但它完成所有自动滚动并允许使用DateFormat

DateFormat df = new SimpleDateFormat("HH:mm");
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
int startDate = cal.get(Calendar.DATE);
while (cal.get(Calendar.DATE) == startDate) {
    System.out.println(df.format(cal.getTime()));
    cal.add(Calendar.MINUTE, 30);
}

你不能24:00 00:00 ...

答案 1 :(得分:1)

试试这个 -

Calendar instance = Calendar.getInstance();
instance.setTime(new SimpleDateFormat("hh:mm:ss a").parse("00:00:00 AM"));
System.out.println(instance.getTime());
int i=1;
while(i++!=49){
     instance.add(Calendar.MINUTE, 30);
     System.out.println(instance.getTime());
}

答案 2 :(得分:1)

TL;博士

myLocalTime.plusMinutes( gapInMinutes )  // Using `java.time.LocalTime` class.

详细

我正在以书面形式回答你的问题,每天24小时。但要注意,日子并不总是这么长。它们可能是23,25或其他一些小时。

没有24:00这样的事情意味着转到00:00。因此,持续30分钟意味着在23:30结束。

java.time

现代方法使用java.time类来取代麻烦的旧日期时间类。

LocalTime& Duration

LocalTime类表示没有日期且没有时区的时间。这个类假设一般24小时工作日(尽管那是不现实的。)

Duration类表示未附加到时间轴的时间范围。

int gapInMinutes =  30 ;  // Define your span-of-time.
int loops = ( (int) Duration.ofHours( 24 ).toMinutes() / gapInMinutes ) ;
List<LocalTime> times = new ArrayList<>( loops ) ;

LocalTime time = LocalTime.MIN ;  // '00:00'
for( int i = 1 ; i <= loops ; i ++ ) {
    times.add( time ) ;
    // Set up next loop.
    time = time.plusMinutes( gapInMinutes ) ;
}

System.out.println( times.size() + " time slots: " ) ;
System.out.println( times ) ;

请参阅此code run live at IdeOne.com

  

48个时段:

     

[00:00,00:30,01:00,01:30,02:00,02:30,03:00,03:30,04:00,04:30,05:00,05: 30,06:00,06:30,07:00,07:30,08:00,08:30,09:00,09:30,10:00,10:30,11:00,11:30, 12:00,12:30,13:00,13:30,14:00,14:30,15:00,15:30,16:00,16:30,17:00,17:30,18: 00,18:30,19:00,19:30,20:00,20:30,21:00,21:30,22:00,22:30,23:00,23:30]

关于java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和&amp; SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore

答案 3 :(得分:0)

尝试使用此代码

private void displayTimeSlots() {

    String timeValue = "T00:00:4.896+05:30";
    SimpleDateFormat sdf = new SimpleDateFormat("'T'hh:mm:ss.SSS");
    try {
        Calendar startCalendar = Calendar.getInstance();
        startCalendar.setTime(sdf.parse(timeValue));

        if (startCalendar.get(Calendar.MINUTE) < 30) {
            startCalendar.set(Calendar.MINUTE, 30);
        } else {
            startCalendar.add(Calendar.MINUTE, 30); // overstep hour and clear minutes
            startCalendar.clear(Calendar.MINUTE);
        }

        Calendar endCalendar = Calendar.getInstance();
        endCalendar.setTime(startCalendar.getTime());

        // if you want dates for whole next day, uncomment next line
        //endCalendar.add(Calendar.DAY_OF_YEAR, 1);
        endCalendar.add(Calendar.HOUR_OF_DAY, 24 - startCalendar.get(Calendar.HOUR_OF_DAY));

        endCalendar.clear(Calendar.MINUTE);
        endCalendar.clear(Calendar.SECOND);
        endCalendar.clear(Calendar.MILLISECOND);

        SimpleDateFormat slotTime = new SimpleDateFormat("hh:mm a");
        while (endCalendar.after(startCalendar)) {

            startCalendar.add(Calendar.MINUTE, 30);
            String Timeslots = slotTime.format(startCalendar.getTime());


            Log.e("DATE", Timeslots);
        }

    } catch (ParseException e) {
        // date in wrong format
    }
}