问题标签 [java.time.instant]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 我应该使用什么 Java DateTime 类?
我们有一个用于生成报告的库。它从数据文件(SQL、XML、JSON 等)中读取数据,然后可以在用户编写的公式中修改日期时间,然后按照报告输出指定的格式对其进行格式化。
方程中的使用可以添加时间跨度,获取部分值,如“if date.month == 2”,以及Excel 中的几乎所有 datetime 宏。
因为数据可以是 JSON(或没有架构的 XML),所以日期时间可以是“2019-01-25”、“2019-01-25T14:32:23”、“2019-01-25T14:32:23.12345”、“ 2019-01-25T14:32:23Z”或“2019-01-25T14:32:23Z-0500”(最后两个也可以有“.12345”)。
如果没有时区偏移,我们假设日期时间是 UTC。虽然这应该是真的,但通常不是,它是当地时间,但它的使用方式并不重要。因此,除非指定时区偏移量,否则将其设为 UTC 是可行的(到目前为止,我们已经使用了 Date)。
第一个问题 - 我应该使用什么类来保存这个值?从我读过的内容来看,我认为 ZonedDateTime,但也许是 Instant?
第二个问题 - 当我必须做一些事情时,我应该使用什么类来为时间跨度添加 3 天到日期时间?
第三个问题 - 是否有一些解析器可以解析我上面列出的所有不同字符串?还是我需要调用 String.contains() 来确定格式,然后根据它做一个明确的模式?如果是这样,使用什么类?
java - postgresql 日期与 java Instant
假设我在 Java 应用程序中有一个 type 字段Instant
并将其作为 type 存储在 PostgreSQL 数据库中DATE
。
例如,如果我保存21.02.2019 14:03:59
它将被存储为21.02.2019
但是当我从数据库中读取时它将如何重新翻译?
那将会:
21.02.2019 00:00:00.000
或者21.02.2019 23:59:59.000
?
PS。我知道我应该Timestamp
改用:)
java - 为什么不支持向 java.time.Instant 添加周数?
下面的一段代码:
抛出异常:
为什么不支持周数?我理解为什么不支持月份和年份,因为它们在较小单位中的持续时间可能会有所不同。但是一周的持续时间是固定的(7 天),我可以通过以下方式达到相同的效果:
date - Spring Data Jpa:java 8 即时比较
在我的应用程序中,我需要按他的创建日期搜索订单。在我的实体中,creationDate 字段的类型是 java.time.Instant。
在我的类ManualOrderSpecification 中,我需要检查creation_date。
我想比较没有小时数或相同小时(例如 0 小时)的创建日期。
我的代码:
当然它不起作用,因为我比较相同的日期但不同的时间,0小时到另一个小时。我如何强制与本地日期进行比较,或者我可以强制将 root.get(ManualOrder_.createdDate) 属性设置为 0 小时?
非常感谢
java - 计算两个瞬间之间的天数、小时数和分钟数
我有一个像这样格式化的即时:
我想计算瞬间和 Instant.now() 之间的天数、小时数和分钟数(如果可能),例如:
我可以这样做吗?
java - 带有小数秒的 Java 时间戳
如何将 Java 打印Instant
为带有小数秒的时间戳,如 1558766955.037 ?如示例所示,所需的精度为 1/1000。
我试过(double) timestamp.getEpochSecond() + (double) timestamp.getNano() / 1000_000_000
了,但是当我将它转换为字符串并打印它时,它显示1.558766955037E9
.
java - java.time.LocalDate 与“营业日期”的即时对比
我想代表一个“营业日期”,例如“2019 年 6 月 3 日”发生的交易。为此,我们积极忽略时区,因为完全知道日本的“2019 年 6 月 3 日”可能是美国的“2019 年 6 月 2 日”——在“当天”内订购同样无关紧要。所有日期都将是今天或之前的日期。
我的明显答案是,这是一个LocalDate
. 但是,其他人建议将其更好地表示为Instant
of 2019-06-03T00:00:00.000Z
。
除了在 UI 中将其转换/格式化为人类可读日期时我们必须进行的不同调用之外,这两种方法之间实际上有什么区别吗?
这是一个不同的问题Instant 和 LocalDateTime 之间有什么区别?因为时间与这个问题无关,它只与过去(或当前)日期有关。
java - Java 8:使用 Instant,如何检索 ZoneId 信息
我在我的用例中使用 Java Instant,我想在时间轴中捕获确切的时刻,例如{用户上次访问我的网站的时间}。这是数据持久保存在后端 (sql) 中的时间。当我使用 Instant.now(); 时,它以 UTC 格式持续存在;
由于我的网站在所有区域(世界上)都使用,当用户登陆主页时,我想根据他的 zoneId 将 dateTime (他上次访问网站的时间)显示为 localDateTime。
如何获取 ZoneId 信息?
由于我的网站目前托管在 2 台服务器中,并且两台服务器都在印度,如果我这样做ZoneId.systemDefault()
,我总是会得到印度 ZoneId(亚洲/加尔各答)。所以,转换是不可能的。
如果来自美国的某人击中了我的服务器,我如何在我的服务器中获取 zoneId 作为美国?
java - 在java中以毫秒精度将即时日期时间插入MySql数据库
我正在使用mysql 5.7.x
版本。我也在使用java 8。我正在尝试java.time.instant
从java代码将当前日期时间以毫秒精度插入到我的mysql数据库中。为此,我正在使用preparedstatement
.
我的数据库中的表是:
我要插入的java代码是:
从我的日志中,我可以看到毫秒为:2019-07-30T10:52:34.865Z。但在我的 mysql 数据库中,它变成:2019-07-30 10:52:34.000Z
我在堆栈中搜索了很多问题和答案,但似乎没有一个对我有用。
更新1:
我尝试使用 setObject 作为:
但还是一样的结果。无法检索数据库中的毫秒数。
java - 从 Java 中的 MySQL 检索的 long 值中的毫秒数不正确
首先,我试图在我的 mysql 数据库中以毫秒精度插入时间戳,我通过这段代码获得了成功:
为此,我在数据库中的表是:
instant.toEpochMilli()
这是来自我的 java 代码和timestamp
来自我的数据库的毫秒数:
毫秒:1564566174331 和时间戳:2019-07-31 15:27:54.331
现在我想在我的 java 代码中检索这个时间戳,因此我的代码是:
但是我得到的总时间戳(以毫秒为单位)是:
毫秒:1564566174000
不知何故,331
以毫秒为单位的值消失了。
如何以毫秒精度检索完整的时间戳值。现在我越来越糊涂了。我错过了什么?
我尝试了什么:
A)我尝试使用 ResultSet 的 getTime() 获取时间戳以检索总时间(以毫秒为单位),如下所示:
仍然没有检索到毫秒位置值。结果与上面相同。
B)我也尝试了 getObject() 并且令我惊讶的是,毫秒位置值以某种方式放置在 NANOSECONDS 位置。
我得到了什么:
对象:2019-07-31 15:27:54.000000331