- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
java.time
有一个 Instant封装时间轴上的位置(或“时刻”)的类。虽然我知道这是一个秒/纳秒值,所以与时区或时间偏移没有直接关系,但它的 toString
返回格式化为 UTC 日期/时间的日期和时间,例如 2014-05-13T20:05:08.556Z。还有 anInstant.atZone(zone)
和 anInstant.atOffset(offset)
两者都产生与处理 Instant
一致的值因为具有隐含的 UTC 时区/“零”偏移量。
因此,我会期望:
ZoneOffset.from(anInstant)
产生一个“零”ZoneOffset
OffsetDateTime.from(anInstant)
生成具有“零”偏移量的日期/时间 ZoneId.from(anInstant)
(可能)产生一个UTC ZoneId
ZonedDateTime.from(anInstant)
(可能)产生一个 ZonedDateTime
带有 UTC ZoneId
ZonedDateTime.from
的文档,当我读到它时,似乎赞同这一点。
ZoneOffset.from(anInstant)
失败
DateTimeException
,我想是因为这个原因
OffsetDateTime.from(anInstant)
也失败了,其他两个也是如此。
最佳答案
简答:
JSR-310 设计者不希望人们通过像 ZoneId
类型的静态 from() 方法在机器时间和人类时间之间进行转换。 , ZoneOffset
, OffsetDateTime
, ZonedDateTime
等等。这是明确指定的,如果您仔细研究 javadoc。而是使用:
OffsetDateTime#toInstant():Instant
ZonedDateTime#toInstant():Instant
Instant#atOffset(ZoneOffset):OffsetDateTime
Instant#atZone(ZoneId):ZonedDateTime
Instant
之间进行转换。例如
LocalDateTime
不考虑时区。
Instant
作为计数器或字段元组,JSR-310-team 给出的答案是所谓的机器时间和人类时间之间的严格分离。事实上,他们打算进行严格的分离——参见他们的
guidelines .所以最后他们想要
Instant
仅被解释为机器时间计数器。所以他们故意设计了一个你不能问
Instant
的设计。对于年份、小时等字段。
Instant.toString()
作为字段元组 View ,包括年份、...、小时、... 和偏移符号 Z(用于 UTC 时区)(脚注:在 JSR-310 之外,在此类机器上具有基于字段的外观是很常见的次 - 例如参见维基百科或其他网站上关于
TAI and UTC 的信息)。一旦规范负责人 S. Colebourne 在对
threeten-github-issue 的评论中说:
Instant
对于年、...、小时、...和偏移量。另请参阅支持字段的文档:
NANO_OF_SECOND
MICRO_OF_SECOND
MILLI_OF_SECOND
INSTANT_SECONDS
Instant
这样的对象的说法。或 java.util.Date
没有时区。 在我看来,这是一个过于简单化的观点。虽然这些对象在内部确实没有时区状态(并且也不需要具有这样的内部值),但这些对象必须与 UTC 时区相关,因为这是每个时区偏移计算和转换为本地类型的基础.所以正确答案是:An
Instant
是一个机器计数器,它在时区 UTC(根据规范)中计算自 UNIX 纪元以来的秒数和纳秒数。最后一部分 - 与 UTC 区域的关系 - JSR-310-team 没有很好地说明,但他们不能否认。
设计师希望从 Instant
中取消时区方面因为它看起来与人类时间有关。 但是,他们不能完全废除它,因为这是任何内部偏移计算的基本部分。所以你的观察
Instant.atZone(zone)
和一个
Instant.atOffset(offset)
都会产生一个与将 Instant 视为具有隐含的 UTC 时区/'零'偏移量一致的值。”
ZoneOffset.from(anInstant)
可能非常直观可能会产生
ZoneOffset.UTC
,它抛出异常,因为它的 from() 方法搜索不存在的
OFFSET_SECONDS-field . JSR-310 的设计者出于同样的原因决定在规范中这样做,即让人们认为
Instant
与 UTC 时区正式无关,即“没有时区”(但在内部,他们必须在所有内部计算中接受这个基本事实!)。
OffsetDateTime.from(anInstant)
和
ZoneId.from(anInstant)
也失败
ZonedDateTime.from(anInstant)
我们
read :
ZoneId
也不是
ZoneOffset
可以从
Instant
获得.异常消息如下:
LocalDate
之间的转换和
Instant
值得怀疑。此行为已指定,但我预测您的问题不是此类问题的最后一个,许多用户将继续感到困惑。
Instant
应该更好地表现得像两者。量子力学中的一个类比:您可以将电子视为粒子和波。
TemporalAccessor
更具体的参数。 .这些方法的弱点在于人们可能会忘记在此类转换中考虑相关的时区,因为它们以本地类型开始查询。考虑例如:
LocalDate.from(anInstant)
(在哪个时区???)。但是,如果您直接询问
Instant
其日期如
instant.getDate()
,我个人认为 UTC 时区中的日期是有效答案,因为这里查询是从 UTC 角度开始的。
Instant
不指定时区。我只是在 API 设计方面有所不同,以防止用户进行这种无时区转换。我的首选方法是限制 from() 方法,而不是说全局类型不应与人类时间格式(例如日历日期或挂墙时间或 UTC 时区偏移)有任何关系。
关于与 java.time.Instant 对象一起使用时的 Java SE 8 TemporalAccessor.from 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23641846/
我无法从远程 Ubuntu 服务器打开在本地 macOS 机器上运行的 Stata 的 GUI。 我已经安装了stata-se在我的本地机器上,我可以打开 X11 应用程序,如 xclock和 xey
我正在尝试将 tobit 模型从 Stata 迁移到 R。 稳健的 Stata 命令只需将 ,vce(robust) 添加到模型中。对于集群,它将是 ,vce(cluster idvar)。 可重现的
以下代码在 JavaSE 6 中工作正常,但在 JavaSE 7 中执行时抛出 ConnectException(超时)。这是 JDK7 错误还是错误代码?实在是看不懂…… public sta
在 SE 6 或 SE 7 的任何类中是否有任何地方不是最终的,即可以直接设置的字段? 我正在研究从另一种语言 (Haskell) 到 Java 的绑定(bind),我正在寻找那个特定的案例来检查我的
我想学习 Java,特别是 Android 开发,因为我要买一台新的平板电脑,但也想学习 Java 可以做的许多其他事情(Struts、网络开发、JWebSockets 等)。我是一位在 PHP、Ja
我正在尝试使用 websockets 编写一些东西,但遇到了无法解析的导入问题。 经过几次尝试,我创建了两个相同的项目。一份使用 Java SE9,一份使用 JAVA SE-1.8。 导入适用于 1.
我使用 Weld SE 创建了一个简单的 JavaSE 应用程序。我正在尝试使用 gradle run 运行它会抛出异常: :compileJava UP-TO-DATE :processResour
我正在尝试将现有应用程序的 Java JDK 版本从 Java 5 更改为 Java 6(更新 38)。该应用程序使用一些 JAXB 生成的类来编码/解码我们从远程服务器发送/接收的 XML。 XML
我有一个命令行 Java 应用程序,它在 Windows 7 x64 平台上读写文件。当前应用程序使用随附的 IBM Java SE 6 运行。结构如下: APP_ROOT some_fold
在主题中,我有一个使用 Java 1.6 编译的 Java SE 应用程序部署在 Java 1.7 运行时环境中。由于 Java 是高度向后兼容的,我假设一切都会很好 - 但自从它部署在 1.7 环境
我正在开发一个 JavaFX 2 项目,并且该应用程序必须使用另一个 main 方法(根据生成的 JAR list 为 com.javafx.main.Main)启动。据官方焊缝reference引导
内部类 1. 内部类的概述 内部类指的是****把类定义在另一个类的内部,该类就被称为内部类。类名不需要和源文件名相同。 内部类的种类: 在Java中,内部类的使用共有两种情况: (1). 在类中定义
我正在开发一个 Java 应用程序,用于在 yfrog.com 上上传图像。 我可以在API页面成功发帖但没有二进制文件,只有一个字符串参数 . 另外我使用的方法只接受“字符串”。 URLConnec
我在我的应用程序中创建了一个与端口绑定(bind)的 ServerSocket。我将此应用程序分发到同一网络上连接的 PC。我可以使用此端口向安装了该应用程序的任何 PC 发送请求。现在接收者可以接收
我已经解决了Java SE Security特点。 据我了解,此标准功能的整体理念是保护用户免受恶意软件的侵害。 对于 Web 上的两个 Java 应用程序,默认情况下启用 SecurityManag
当我编译代码时,我的 java 应用程序出现问题,它说找不到符号 roomLength。应用程序应该做的是提示用户输入房间名称,然后如果它是“退出”,那么它必须关闭程序。否则会提示房间的长、宽、高。如
我不明白为什么下面的代码返回“false” String x="Hello World"; String z=" Hello World".trim(); System.out.println(x==
首先,我要说的是我在观看此视频时完成了所有这些操作:https://www.youtube.com/watch?v=Hl-zzrqQoSE 所以,我尝试下载适用于 Windows 64 位的 jdk-
我正在尝试创建一个具有用户友好界面的网络Java SE应用程序,我对GUI库(Swing、SWT、JavaFX)感到很困惑 以及关于应用程序 (MVC、PureMVC) 的架构 任何有经验的人都可以给
拜托,我有一个 java 桌面应用程序,我想要一种将我的桌面应用程序连接到在线数据库的方法。我想知道可用于执行此操作的技术。 最佳答案 您可以只使用 JDBC。 您必须创建与数据库属性的连接,例如:
我是一名优秀的程序员,十分优秀!