gregoriancalendar(添加calendar.hour\u of \u day vs calendar.hour)

rkttyhzu  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(382)

要在当前时间的基础上增加一小时,我可以用这个吗?

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);
ryevplcw

ryevplcw1#

Calendar mcalendar = new GregorianCalendar();

这个 GreogorianCalendar 是抽象类的子类 Calendar . 因此,您在这里所做的是将gregoriancalendar的一个示例引用到calendar,因此 Calendar 将跟踪执行 GregorianCalendar 但既然你的目的是增加时间。
你可以继续 Calendar mcalendar = Calendar.getInstance(); 当它用当前 Locale .
但是,如果你想改变你的 Locale ,将参数传入 getInstance() 方法和指定的 Locale 将为您生成。
参考:https://docs.oracle.com/javase/7/docs/api/java/util/calendar.html#getinstance(java.util.locale)
如果你想用小时:
执行以下操作:
不要使用 HOUR 变量,因为这只是12小时的时间。使用 Calendar.HOUR_Of_DAY 处理24小时计时。

vc6uscn9

vc6uscn92#

热释光;博士

Duration duration = Duration.ofHours( 1 ) ;
ZoneId zoneId = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = ZonedDateTime.now( zoneId ).plus( duration ) ;
DateTimeFormatter f = DateTimeFormatter
                      .ofLocalizedDateTime( FormatStyle.FULL )
                      .withLocale( Locale.GERMANY) ;
String output = zdt.format( f ) ;

桑塔格,27岁。德州2020 um 22:58:52 Nordamericanische ostkü听正常

java.time文件

现代解决方案使用java.time类。从不使用 Calendar 或者 GregorianCalendar .

utc公司

捕捉utc中的当前时刻。使用 Instant .

Instant instant = Instant.now() ;  // Capture the current moment as seen in UTC.

定义与时间线无关的时间跨度。

Duration duration = Duration.ofHours( 1 ) ;

添加。

Instant instantHourLater = instant.plus( duration ) ;

分区

你可能想看一天中的时间和那一刻的日期,就像通过墙上的时钟看一个特定地区的人们使用的时间一样。应用时区( ZoneId )得到一个 ZonedDateTime 对象。同一时刻,同一时间点,不同的挂钟时间。

ZoneId zoneId = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = instant.atZone( zoneId ) ;

或者,跳过 Instant 以及 Duration .

ZonedDateTime zdt = ZonedDateTime.now( zoneId ).plusHours( 1 ) ;

文本

你说:
我计划使用24小时制
例如 Instant , OffsetDateTime ,和 ZonedDateTime 代表一个时刻,时间线上的一个点。它们与文本无关。它们没有“格式”。它们可以解析表示一个时刻的文本,并生成表示一个时刻的文本。但在内部,他们有自己的方式来表示那一刻,没有任何格式化的文本。
要生成特定格式的文本,请使用 DateTimeFormatter 与…同班 FormatStyle 以及 Locale . 这已经在堆栈溢出上讨论过很多次了。因此,搜索以了解更多信息。

DateTimeFormatter f = DateTimeFormatter
                      .ofLocalizedDateTime( FormatStyle.FULL )
                      .withLocale( Locale.CANADA_FRENCH ) 
;
String output = zdt.format( f ) ;

请在ideone.com上查看此代码的实时运行。
输出:迪曼奇27 décembre 2020年à 22小时51分57秒

关于java.time

java.time框架内置于Java8及更高版本中。这些类取代了旧的遗留日期时间类,例如 java.util.Date , Calendar , & SimpleDateFormat .
要了解更多信息,请参阅oracle教程。和搜索堆栈溢出的许多例子和解释。规格为jsr 310。
现在处于维护模式的joda time项目建议迁移到java.time类。
您可以直接与数据库交换java.time对象。使用符合jdbc 4.2或更高版本的jdbc驱动程序。不需要线,不需要线 java.sql.* 班级。hibernate5和jpa2.2支持java.time。
从哪里获得java.time类?
JavaSE8、JavaSE9、JavaSE10、JavaSE11及更高版本—标准JavaAPI的一部分,带有捆绑实现。
Java9带来了一些小的特性和修复。
java se 6和java se 7
大部分java.time功能都是通过三个十个后端口后端口移植到Java6和Java7的。
安卓
android(26+)的更高版本捆绑了java.time类的实现。
对于早期的android(<26),一个称为api desugaring的过程带来了java.time功能的一个子集,这些功能最初没有内置到android中。
如果desugaring不能提供您所需要的,那么threetenabp项目将threeten backport(如上所述)改编为android。了解如何使用threetenabp…。

相关问题