要在当前时间的基础上增加一小时,我可以用这个吗?
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);
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小时计时。
GreogorianCalendar
Calendar
GregorianCalendar
Calendar mcalendar = Calendar.getInstance();
Locale
getInstance()
HOUR
Calendar.HOUR_Of_DAY
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类。从不使用 Calendar 或者 GregorianCalendar .
捕捉utc中的当前时刻。使用 Instant .
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
ZonedDateTime
ZoneId zoneId = ZoneId.of( "America/Montreal" ) ; ZonedDateTime zdt = instant.atZone( zoneId ) ;
或者,跳过 Instant 以及 Duration .
Duration
ZonedDateTime zdt = ZonedDateTime.now( zoneId ).plusHours( 1 ) ;
你说:我计划使用24小时制例如 Instant , OffsetDateTime ,和 ZonedDateTime 代表一个时刻,时间线上的一个点。它们与文本无关。它们没有“格式”。它们可以解析表示一个时刻的文本,并生成表示一个时刻的文本。但在内部,他们有自己的方式来表示那一刻,没有任何格式化的文本。要生成特定格式的文本,请使用 DateTimeFormatter 与…同班 FormatStyle 以及 Locale . 这已经在堆栈溢出上讨论过很多次了。因此,搜索以了解更多信息。
OffsetDateTime
DateTimeFormatter
FormatStyle
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框架内置于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…。
java.util.Date
SimpleDateFormat
java.sql.*
2条答案
按热度按时间ryevplcw1#
这个
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小时计时。vc6uscn92#
热释光;博士
桑塔格,27岁。德州2020 um 22:58:52 Nordamericanische ostkü听正常
java.time文件
现代解决方案使用java.time类。从不使用
Calendar
或者GregorianCalendar
.utc公司
捕捉utc中的当前时刻。使用
Instant
.定义与时间线无关的时间跨度。
添加。
分区
你可能想看一天中的时间和那一刻的日期,就像通过墙上的时钟看一个特定地区的人们使用的时间一样。应用时区(
ZoneId
)得到一个ZonedDateTime
对象。同一时刻,同一时间点,不同的挂钟时间。或者,跳过
Instant
以及Duration
.文本
你说:
我计划使用24小时制
例如
Instant
,OffsetDateTime
,和ZonedDateTime
代表一个时刻,时间线上的一个点。它们与文本无关。它们没有“格式”。它们可以解析表示一个时刻的文本,并生成表示一个时刻的文本。但在内部,他们有自己的方式来表示那一刻,没有任何格式化的文本。要生成特定格式的文本,请使用
DateTimeFormatter
与…同班FormatStyle
以及Locale
. 这已经在堆栈溢出上讨论过很多次了。因此,搜索以了解更多信息。请在ideone.com上查看此代码的实时运行。
输出:迪曼奇27 décembre 2020年à 22小时51分57秒
关于java.time
java.time框架内置于Java8及更高版本中。这些类取代了旧的遗留日期时间类,例如
![](https://i.stack.imgur.com/Sksw9.png)
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…。