Java Android中的GregorianCalendar(添加Calendar.HOUR OF_DAY与Calendar.HOUR)
要在当前时间的基础上增加一小时,我可以使用这个吗Java Android中的GregorianCalendar(添加Calendar.HOUR OF_DAY与Calendar.HOUR),java,android,calendar,Java,Android,Calendar,要在当前时间的基础上增加一小时,我可以使用这个吗 Calendar mcalendar = new GregorianCalendar(); mcalendar.add(Calendar.HOUR_OF_DAY, 1); //I plan to use 24 hours format 我看到许多例子使用了: Calendar mcalendar = Calendar.getInstance(); mcalendar.add(Calendar.HOUR, 1); GreogorianCalen
Calendar mcalendar = new GregorianCalendar();
mcalendar.add(Calendar.HOUR_OF_DAY, 1); //I plan to use 24 hours format
我看到许多例子使用了:
Calendar mcalendar = Calendar.getInstance();
mcalendar.add(Calendar.HOUR, 1);
GreogorianCalendar
是抽象类Calendar
的一个子类。因此,您在这里所做的是将GregorianCalendar的实例引用到日历,因此Calendar
中的所有抽象方法都将遵循GregorianCalendar
但既然你的目的是增加时间
您可以继续使用Calendar mcalendar=Calendar.getInstance()当它使用当前的语言环境
检索当前的实例时
但是,如果要更改区域设置
,请将参数传递到getInstance()
方法中,然后将为您生成指定的区域设置
的实例
参考:
如果您想使用小时:
请执行以下操作:
不要使用HOUR
变量,因为这仅适用于12小时时间。使用Calendar.HOUR Of_DAY
处理24小时计时
GreogorianCalendar
是抽象类Calendar
的一个子类。因此,您在这里所做的是将GregorianCalendar的实例引用到日历,因此Calendar
中的所有抽象方法都将遵循GregorianCalendar
但既然你的目的是增加时间
您可以继续使用Calendar mcalendar=Calendar.getInstance()当它使用当前的语言环境
检索当前的实例时
但是,如果要更改区域设置
,请将参数传递到getInstance()
方法中,然后将为您生成指定的区域设置
的实例
参考:
如果您想使用小时:
请执行以下操作:
不要使用HOUR
变量,因为这仅适用于12小时时间。使用日历小时处理24小时计时。tl;博士
Duration Duration=Duration.of小时(1);
ZoneId ZoneId=美国/蒙特利尔地区;
ZonedDateTime zdt=ZonedDateTime.now(zoneId).plus(持续时间);
DateTimeFormatter f=DateTimeFormatter
.OfCalizedDateTime(FormatStyle.FULL)
.withLocale(Locale.GERMANY);
字符串输出=zdt.格式(f);
桑塔格,27岁。Dezember 2020 um 22:58:52北美标准
java.time
现代解决方案使用java.time类。切勿使用日历
或格里高利安日历
UTC
捕获UTC中显示的当前时刻。使用
定义与时间线无关的时间跨度
Duration duration = Duration.ofHours( 1 ) ;
增加
Instant instantHourLater = instant.plus( duration ) ;
分区
你可能想通过一个特定地区的人们使用的挂钟看到一天中的时间和那个时刻的日期。应用时区(ZoneId
)以获取zoneDateTime
对象。同一时刻,时间线上的同一点,不同的挂钟时间
ZoneId zoneId = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = instant.atZone( zoneId ) ;
或者,跳过瞬间
和持续时间
ZonedDateTime zdt = ZonedDateTime.now( zoneId ).plusHours( 1 ) ;
正文
你说:
我计划使用24小时制
诸如Instant
、OffsetDateTime
和zoneDateTime
之类的类表示时间线上的一个时刻、一个点。它们与文本无关。它们没有“格式”。它们可以解析表示某个时刻的文本,并生成表示某个时刻的文本。但在内部,他们有自己的表达方式,没有任何格式化文本
若要以特定格式生成文本,请将类与和一起使用。这已经在堆栈溢出上讨论过很多次了。因此,搜索以了解更多信息
DateTimeFormatter f = DateTimeFormatter
.ofLocalizedDateTime( FormatStyle.FULL )
.withLocale( Locale.CANADA_FRENCH )
;
String output = zdt.format( f ) ;
看这个
输出:迪曼奇27 décembre 2020年22小时51分57秒
关于java.time
该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&
要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是
该项目现已启动,建议迁移到类
您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要java.sql.*
类。Hibernate5和JPA2.2支持java.time
从哪里获得java.time类
- 、和更高版本-标准Java API的一部分,带有捆绑实现。
- 带来了一些小功能和修复
- 及
- 大多数java.time功能都在中向后移植到Java6和Java7
-
- Android(26+)的更高版本捆绑了java.time类的实现
- 对于早期的Android(tl;dr
Duration Duration=Duration.of小时(1);
ZoneId ZoneId=美国/蒙特利尔地区;
ZonedDateTime zdt=ZonedDateTime.now(zoneId).plus(持续时间);
DateTimeFormatter f=DateTimeFormatter
.OfCalizedDateTime(FormatStyle.FULL)
.withLocale(Locale.GERMANY);
字符串输出=zdt.格式(f);
Sonntag,27.Dezember 2020 um 22:58:52北美标准
java.time
现代解决方案使用java.time类。永远不要使用Calendar
或gregorianalendar
UTC
捕获UTC中显示的当前时刻。使用
定义与时间线无关的时间跨度
Duration duration = Duration.ofHours( 1 ) ;
增加
Instant instantHourLater = instant.plus( duration ) ;
分区
您可能希望通过特定地区的人使用的挂钟时间查看一天中的时间和该时刻的日期。应用时区(ZoneId
)以获取zoneDateTime
对象。同一时刻,时间线上的同一点,不同的挂钟时间
ZoneId zoneId = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = instant.atZone( zoneId ) ;
或者,跳过实例