在 Java 中快速获取当前日历对象的方法
Fast way to get the current Calendar object in Java
给定一个需要在每次调用时使用当前 day/month/year 的值并且每秒被调用数次(数百万次或更多次)的方法,是否有更快的方法来实现该功能,其他比在每次调用时为当前时间创建一个 Calendar
对象?
使用 Calendar.getInstance()
或 calendar.setTime()
(需要重新计算时间字段)每秒执行多次操作成本过高。
标准 Java 解决方案更可取(例如,优于使用第三方库)。
使用日期,而不是日历 class 它将为您提供当前日期
要获取当前 date/time,我发现 LocalDate.now()
比 Calendar.getInstance()
快。 LocalDate class 可以在 java.time
包中找到,这是自 Java 8 以来新增的(当然,如果你想保持与旧 Java 版本的兼容性,那可能不是一个选项)。
标准 java(无第 3 方库)范围内的最佳解决方案是使用 class LocalDate
。到目前为止,这个答案与@Chronio 的答案相同,但我在使用上有所不同。工厂方法 now()
不能这么快,因为它利用了系统时区 - 甚至可能在 TimeZone.getDefault()
.
深度的任何地方使用同步方法
但是 class LocalDate
如果您使用带有年、月和月日参数的工厂方法,则速度非常快。在这里,您只是设置州成员,没有任何时区计算,也没有任何公历数学计算(好吧,只涉及快速的依赖于年份的月长检查)。直接看源码。
给定一个需要在每次调用时使用当前 day/month/year 的值并且每秒被调用数次(数百万次或更多次)的方法,是否有更快的方法来实现该功能,其他比在每次调用时为当前时间创建一个 Calendar
对象?
使用 Calendar.getInstance()
或 calendar.setTime()
(需要重新计算时间字段)每秒执行多次操作成本过高。
标准 Java 解决方案更可取(例如,优于使用第三方库)。
使用日期,而不是日历 class 它将为您提供当前日期
要获取当前 date/time,我发现 LocalDate.now()
比 Calendar.getInstance()
快。 LocalDate class 可以在 java.time
包中找到,这是自 Java 8 以来新增的(当然,如果你想保持与旧 Java 版本的兼容性,那可能不是一个选项)。
标准 java(无第 3 方库)范围内的最佳解决方案是使用 class LocalDate
。到目前为止,这个答案与@Chronio 的答案相同,但我在使用上有所不同。工厂方法 now()
不能这么快,因为它利用了系统时区 - 甚至可能在 TimeZone.getDefault()
.
但是 class LocalDate
如果您使用带有年、月和月日参数的工厂方法,则速度非常快。在这里,您只是设置州成员,没有任何时区计算,也没有任何公历数学计算(好吧,只涉及快速的依赖于年份的月长检查)。直接看源码。