为什么java。util。日期对象显示日期
在docs中,还有一个java。util。Date实例没有时区的概念。
如果是这样,为什么这个片段打印日期指定时区。
public static void main(String[] args) {
Date date = new Date();
System.out.println(date);
}
输出:2017年3月22日星期三14:58:56
为什么它在输出中显示特定的时区?我理解SOP在内部实现了toString()。toString()会影响时区吗?
它确实有时区的概念,但总是UTC。因此,当它打印日期时,将其转换为计算机的时区没有问题。
UTC当前时刻。
Instant.now() // Capture current moment in UTC.
.toString() // Generate String in standard ISO 8601 format.
2018-01-23T01:23:45.677340Z
印度时区的当前时刻。
ZonedDateTime.now(
ZoneId.of( "Asia/Kolkata" )
).toString() // Generate string in format wisely extended from ISO 8601 standard, adding the time zone name in square brackets.
2018-01-23T06:53:45.677340 05:30[Asia/Kolkata]
为什么java。util。日期对象显示日期
因为java.util.Date
和相关的类(日历
,SimpleDateFormata
等等)设计得很差。虽然在处理日期-时间处理这个棘手的问题上做了勇敢的努力,但它们没有达到目标。它们充满了糟糕的设计选择。你应该避免它们,因为它们现在被java.time类取代了,这是一个巨大的进步。
特别要回答您的问题:Date
的toString
方法在生成String时动态应用JVM的当前默认时区。因此,虽然Date
对象本身表示UTC中的某个时刻,但toString
会产生错误的印象,即它携带显示的时区。
更糟糕的是,Date
对象中隐藏着一个时区。该区域在内部使用,但与我们这里的讨论无关。令人困惑是的,还有另一个避免上这门课的原因。
爪哇。util。Date实例没有时区的概念。
不是真的。日期
代表一个特定的时刻,时间线上的一个点,分辨率为毫秒,以UTC为单位。正如您所提到的,它被定义为自UTC 1970年第一个时刻以来的毫秒计数。
爪哇。时间类别明确区分UTC、分区和非分区值的概念。
java。时间Instant
类表示UTC时间线上的一个时刻,分辨率为纳秒(最多九(9)位小数)。这个类取代了java。util。日期
。
Instant instant = Instant.now() ; // Capture current moment in UTC.
将时区(ZoneId
对象)应用于即时
对象,您将获得一个ZoneDateTime
对象。该类取代了java。util。日历
class。
ZoneId z = ZoneId.of( "Asia/Kolkata" ) ;
ZonedDateTime zdt = instant.atZone( z ) ; // Same simultaneous moment as `instant`, but different wall-clock time.
如果一个值只有UTC的偏移量,但没有完整的时区,请使用OffsetDateTime
类。
对于仅限日期、不含时间和时区的情况,请使用LocalDate
类。这个类取代了java。sql。日期
课程。同样适用于LocalTime
替换java。sql。时间
。
LocalDate xmasDate2018 = LocalDate.of( 2018 , Month.DECEMBER , 25 ) ;
如果区域或偏移量未知或不确定,例如“圣诞节在2018年12月25日午夜钟声响起时开始”,请使用LocalDateTime
类。此类不表示实际时刻,即时间线上的特定点。此类缺乏时区或偏移量的任何概念。因此,它只能表示大约26-27小时范围内的潜在时刻。
LocalDateTime xmasEverywhere2018 = LocalDateTime.of( xmasDate2018 , LocalTime.MIN ) ;
或者…
LocalDateTime xmasEverywhere2018 = LocalDateTime.of( 2018 , Month.DECEMBER , 25 , 0 , 0 , 0 , 0 ) ;
爪哇。时间框架内置于Java8及更高版本中。这些类取代了麻烦的旧遗留日期时间类,比如java。util。日期
,日历
,
现在处于维护模式的Joda-Time项目建议迁移到java.time类。
要了解更多信息,请参阅Oracle教程。并在Stack Overflow中搜索许多示例和解释。规范是JSR 310。
使用符合JDBC 4.2或更高版本的JDBC驱动程序,您可以交换java。时间对象直接与数据库连接。不需要字符串或java。sql.*上课。
在哪里可以获得java。时间课?
Three10-Extra项目通过附加类扩展java.time。该项目是未来可能添加到java.time.的试验场。您可以在这里找到一些有用的类,如Interval
,YearZacks
,YearQuter
等。
只要按照javadoc,因为它说:
公共字符串toString()
将此Date对象转换为表单的String:
Dowmon dd hh: mm: ss zzz yyyy
zzz是时区(可能反映夏令时)。
当你深入了解源代码时,这个toString()实现会在某个时候使用时区。getDefault()(确切地说是getDefaultRef())。换句话说:默认实现会引入JVM的“默认”时区。
Java中的UUID是否像字符串一样内嵌?如果不是,我是否应该尝试回收UUID对象以最大限度地减少RAM使用? 我使用UUID作为数据库主键的数据类型 因此,当从数据库检索行时,我是否应该检查每个UUID是否重复,如果重复,是否使用原始对象引用?或者这已经代表我做了,类似于字符串的内部处理方式?
问题内容: 我想了解ES如何在其索引内部存储日期值。可以转换为UTC吗? 我有一个日期类型的字段“ t”。这是映射: 现在,当我向ES插入/添加文档时,它如何存储在索引中。 “ t”:“ 1427700477165”(从Date.now()函数生成的毫秒数)。ES是否在UTC中识别其时代时间并按原样存储? “ t”:“ 2015-03-29T23:59:59”(我会相应地调整映射日期格式)-ES如
但是,在日志配置的xml文件中,冒号后面总是有一个破折号。这是为什么?例如: ” 2.不断变化的财产名称 特别是,此属性在application.properties(或.yml)中没有等价属性来配置它 ${log_file_total_size_cap:-0} 如果要将该属性更改为其他值,则必须设置LOG_FILE_TOTAL_SIZE_CAP属性。我如何在仍然使用spring Boot提供的原
本文向大家介绍javascript类型系统——日期Date对象全面了解,包括了javascript类型系统——日期Date对象全面了解的使用技巧和注意事项,需要的朋友参考一下 前面的话 Date对象是javascript语言中内置的数据类型,用于提供日期和时间的操作接口。Date对象是在早期java中的java.util.Date类基础上创建的,为此,Date类型使用自UTC1970年1月1日0点
本文向大家介绍简单了解Java日志脱敏框架sensitive,包括了简单了解Java日志脱敏框架sensitive的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了简单了解Java日志脱敏框架sensitive,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 问题 为了保证用户的信息安全,敏感信息需要脱敏。 项目开发过程中,每次处理敏感信
我的应用程序运行在weblogic服务器上,在那里我配置了一个JNDI数据源来获取数据库连接。我试图理解weblogic服务器生成的数据源日志。 路径: 日志内容: 看起来有一个错误信息,但我无法理解为什么数据源会给出错误。请帮助我理解这一点。