使用Java的Date和Calendar类将分钟转换为一周一次

时间:2009-06-18 17:18:59

标签: java datetime time calendar

概述

这是一个场景:我给出的值代表星期六午夜开始的标准星期(假设每周10,080分钟,每天1,440分钟)的总分钟数的一部分(所以星期日是0分钟) @ 12am)。

我需要将这个分钟值转换为实际时间值(比如上午8:35),我想使用Java的Date和/或Calendar类,而不是手动计算。

实施例

以下是一些示例输入值:

  • 720(本周720分钟)所以周日中午12点
  • 3840(本周3840分钟),所以周二下午4点

使用Java的Date和Calendar类,如何检索该相对日的时间组件?

4 个答案:

答案 0 :(得分:2)

此外,使用日历非常简单:

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
int minutesToAdd = 720;
Calendar cal = Calendar.getInstance();

cal.setTime(dateFormat.parse("2009/06/21 00:00:00"));  // Next sunday
cal.add(Calendar.MINUTE, minutesToAdd);

Date result = cal.getTime();                           // Voila

答案 1 :(得分:1)

每天24小时除以获得天数。剩余是当天的分钟数。

除以60得到小时。剩余时间是那个小时的几分钟。

Division和Modulus只需几行代码即可获得答案。因为这听起来像是家庭作业,所以我会将编码从这个答案中删除。

答案 2 :(得分:1)

听起来像家庭作业,这里应该如何运作:

1) Create yourself a calendar instance for sunday, 0:00 (on any date you wish)
2) Now add your minutes with the appropiate function
3) Now retrieve the time parts from the object

答案 3 :(得分:0)

TL;博士

LocalDate.now( ZoneId.of( "America/Montreal" ) )
         .with( TemporalAdjusters.previousOrSame( DayOfWeek.SUNDAY ) )
         .atStartOfDay( ZoneId.of( "America/Montreal" ) )
         .plus( Duration.ofMinutes( 720 ) )

使用java.time

现代的方法是使用java.time类。

哪个星期?我假设你想要本周的星期日。

ZoneId z = ZoneId.of( "America/Montreal" ) ;
LocalDate today = LocalDate.now( z );
LocalDate sundayThisWeek = today.with( TemporalAdjusters.previousOrSame( DayOfWeek.SUNDAY ) );

获取该日期的第一个时刻。不要认为这意味着00:00:00作为夏令时(DST)等异常可能意味着另一个时间,如01:00:00

ZonedDateTime zdt = sundayThisWeek.atStartOfDay( z ); // First moment of the day.

你说你得到了几分钟的输入。将其表示为Duration对象。

Duration duration = Duration.ofMinutes( x );

Duration对象添加到ZonedDateTime对象。

  720(本周720分钟)所以周日中午12点

不,在DST切换日,720分钟可能会导致其他一些时间,例如美国上午11点或下午1点。

对象为您完成所有数学运算,并处理夏令时等异常情况。

ZonedDateTime zdtLater = zdt.plus( duration );

关于java.time

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

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

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

从哪里获取java.time类?

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