这是一个场景:我给出的值代表星期六午夜开始的标准星期(假设每周10,080分钟,每天1,440分钟)的总分钟数的一部分(所以星期日是0分钟) @ 12am)。
我需要将这个分钟值转换为实际时间值(比如上午8:35),我想使用Java的Date和/或Calendar类,而不是手动计算。
以下是一些示例输入值:
使用Java的Date和Calendar类,如何检索该相对日的时间组件?
答案 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)
LocalDate.now( ZoneId.of( "America/Montreal" ) )
.with( TemporalAdjusters.previousOrSame( DayOfWeek.SUNDAY ) )
.atStartOfDay( ZoneId.of( "America/Montreal" ) )
.plus( Duration.ofMinutes( 720 ) )
现代的方法是使用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 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。