Java中以小时为参数的getActualMinimum返回12
我试图通过调用方法Java中以小时为参数的getActualMinimum返回12,java,android,java-calendar,Java,Android,Java Calendar,我试图通过调用方法calendar.set(calendar.HOUR,calendar.getActualMinimum(calendar.HOUR)),来设置calendar的时间但是getActualMinimum(Calendar.HOUR)返回12而不是0。尝试使用Calendar.HOUR\u of\u DAY尝试使用Calendar.HOUR\u of\u DAYtl;博士 使用java.time类,而不是有问题的遗留类 要获得一天中的第一刻,请致电 java.time 您使用的是
calendar.set(calendar.HOUR,calendar.getActualMinimum(calendar.HOUR)),来设置calendar
的时间
但是getActualMinimum(Calendar.HOUR)
返回12而不是0。尝试使用Calendar.HOUR\u of\u DAY
尝试使用Calendar.HOUR\u of\u DAY
tl;博士
使用java.time类,而不是有问题的遗留类
要获得一天中的第一刻,请致电
java.time
您使用的是麻烦的旧日期时间类,它们现在是遗留的,被java.time类取代
获取当前日期和时间需要时区。在任何一个特定的时刻,全球各地的日期和时间因地区而异
ZoneId z = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = ZonedDateTime.now( z ) ;
用时间提取该日期的仅日期部分
LocalDate ld = zdt.toLocalDate() ;
从那个日期开始,让java.time确定一天中的第一个时刻。永远不要假设一天从00:00:00开始。夏时制(DST)等异常意味着一天可能在另一个时间开始,如01:00:00
time类使用。新对象不是改变对象上的属性(“mutate”),而是基于原始对象的值创建新对象
ZonedDateTime zdtResult = null ;
对于开关
语句,请使用现有枚举。由于一个奇怪的技术问题,switch
语句不能使用限定的枚举名。因此,我们必须使用YEARS
而不是ChronoUnit.YEARS
作为开关变量。使用静态导入访问枚举
import static java.time.temporal.ChronoUnit ;
…
switch ( unit ) {
case YEARS :
zdtResult = ld.withDayOfYear( 1 )
.atStartOfDay( z ) ;
break;
case MONTHS :
zdtResult = ld.withDayOfMonth( 1 )
.atStartOfDay( z ) ;
break;
case WEEKS :
zdtResult = ld.with( TemporalAdjusters.previousOrSame( DayOfWeek.MONDAY) )
.atStartOfDay( z ) ;
break;
default: …
}
从结果中提取一个对象,以UTC格式查看同一时刻
Instant instant = zdtResult.toInstant() ;
您的问题的目标似乎是从UTC中1970年第一个时刻的历元参考开始计算毫秒数。我强烈建议不要仅仅使用long
整数来跟踪日期时间值。使调试和跟踪变得麻烦,可能会漏掉bug。而是传递和存储对象
但如果你坚持计数,代码是这样的。当心数据丢失,因为瞬间
的分辨率为纳秒,因此此调用将忽略任何现有的微秒或纳秒
long millisSinceEpoch = instant.toEpochMillis() ;
请注意,使用java.time可以使代码更短、更整洁、可读性更强
关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,& 该项目现已启动,建议迁移到类 要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是 您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要
java.sql.*
类
从哪里获得java.time类
- 然后
- 内置的李>
- 标准JavaAPI的一部分,带有捆绑实现
- Java9添加了一些次要功能和修复
- 及
- 大部分java.time功能都在中向后移植到Java6和Java7
-
- 更高版本的Android捆绑包实现了java.time类
- 对于早期的Android(tl;dr
使用java.time类,而不是有问题的遗留类
要获得一天中的第一刻,请致电
java.time
您使用的是麻烦的旧日期时间类,它们现在是遗留的,被java.time类取代
获取当前日期和时间需要一个时区。对于任何给定的时刻,全球各地的日期和时间因区域而异
用时间提取该日期的仅日期部分ZoneId z = ZoneId.of( "America/Montreal" ) ; ZonedDateTime zdt = ZonedDateTime.now( z ) ;
从该日期开始,让java.time确定一天中的第一个时刻。永远不要假设一天从00:00:00开始。夏时制(DST)等异常情况意味着一天可能从另一个时间开始,如01:00:00 time类使用。而不是改变对象上的属性(“mutate”),而是基于原始对象的值创建新对象LocalDate ld = zdt.toLocalDate() ;
对于ZonedDateTime zdtResult = null ;
语句,请使用现有的enum。由于一个奇怪的技术问题,switch
语句无法使用限定的enum名称。因此,我们必须使用switch
而不是YEARS
作为开关变量。例如,使用静态导入访问enumChronoUnit.YEARS
从结果中提取一个对象,以UTC格式查看同一时刻import static java.time.temporal.ChronoUnit ; … switch ( unit ) { case YEARS : zdtResult = ld.withDayOfYear( 1 ) .atStartOfDay( z ) ; break; case MONTHS : zdtResult = ld.withDayOfMonth( 1 ) .atStartOfDay( z ) ; break; case WEEKS : zdtResult = ld.with( TemporalAdjusters.previousOrSame( DayOfWeek.MONDAY) ) .atStartOfDay( z ) ; break; default: … }
您的问题的目标似乎是从UTC 1970年第一个时刻的历元引用开始计算毫秒数。我强烈建议不要仅使用Instant instant = zdtResult.toInstant() ;
整数来跟踪日期-时间值。这会使调试和跟踪变得麻烦,可能会漏掉bug。请传递并存储对象 但是如果您坚持计数,下面是代码。当心数据丢失,因为long
的分辨率为纳秒,因此此调用将忽略任何现有的微秒或纳秒瞬间
请注意,使用java.time可以使代码更短、更整洁、可读性更强long millisSinceEpoch = instant.toEpochMillis() ;
关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,如,& 该项目现已启动,建议迁移到类 要了解更多信息,请参阅.和搜索堆栈溢出以获取许多示例和解释。规范为 您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要
classes 从哪里获得java.time类java.sql.*
- 然后
- 内置的
- 标准JavaAPI的一部分,带有捆绑实现
- Java9添加了一些次要功能和修复
- 及
- 大部分java.time功能都在中向后移植到Java6和Java7
-
- java.time类的Android捆绑包实现的更高版本
- 然后