在我正在开发的应用程序中,我需要将java.time.Instant对象转换为java.sql.Timestamp.当我创建Instant对象时,例如
Instant now = Instant.now();
Run Code Online (Sandbox Code Playgroud)
并检查元素.我收到类似的东西2017-03-13T14:28:59.970Z
然后我尝试创建这样的Timestamp对象:
Timestamp current = Timestamp.from(now);
Run Code Online (Sandbox Code Playgroud)
当我检查元素时.我收到类似2017-03-13T16:28:59.970Z
相同的结果,但增加了2小时的偏移量.任何人都可以解释你的这种情况,并为我提供答案如何解决这个问题而不会产生抵消?
当我这样创建时:
LocalDateTime ldt = LocalDateTime.ofInstant(Instnant.now(), ZoneOffset.UTC);
Timestamp current = Timestamp.valueOf(ldt);
Run Code Online (Sandbox Code Playgroud)
一切正常.但我尽量避免转换.有没有办法只使用Instant对象?
我有一个来自一个源的Instant,根据规范,它应该是一个LocalDate,但是在LocalDate中没有看到任何转换方法.做这个的最好方式是什么?
我有一个Instant(org.joda.time.Instant)的实例,我得到了一些api响应.我有另一个来自(java.time.Instant)的实例,我可以从其他一些调用获得.现在,我想比较这两个对象来检查哪一个得到最新的.怎么可能?
我认为这java.time.Instant是将日期存储到数据库中的最佳选择:它最有可能是TIMESTAMP,并且您不依赖于时区,它只是当时的一个时刻.
JPA支持LocalDate,LocalTime,LocalDateTime等,但不是即时.当然,你可以使用AttributeConverter像Jadira这样的一个或一些库,但为什么它不支持开箱即用?
我试图使用java 8或utils包将string中的datetime转换为即时.
例如.
String requestTime = "04:30 PM, Sat 5/12/2018";
Run Code Online (Sandbox Code Playgroud)
至
Instant reqInstant should result in 2018-05-12T20:30:00.000Z
Run Code Online (Sandbox Code Playgroud)
reqString位于美国/多伦多时区.
这是我试过的
String strReqDelTime = "04:30 PM, Sat 5/12/2018";
Date date = new SimpleDateFormat("hh:mm a, EEE MM/dd/yyyy").parse(requestTime);
Instant reqInstant = date.toInstant();
Run Code Online (Sandbox Code Playgroud)
上面的代码导致了"2018-05-12T23:30:00Z".
任何帮助表示赞赏.
在Java中,我们可以有许多不同的方式来获得当前的时间戳,但哪一个建议:
Instant.now().toEpochMilli()或System.currentTimeMillis()
对于以下java 8代码
1. System.out.println(LocalDateTime.now(Clock.systemDefaultZone()));
2. System.out.println(Instant.now(Clock.systemDefaultZone()));
Run Code Online (Sandbox Code Playgroud)
第1行打印当前时间通过添加偏移但第2行打印当前时间而不添加偏移量.
我检查了两者的源代码,发现通过添加偏移LocaDateTime.now(clock)返回clock.instant()返回时间但Instant.now(clock)没有这样做.
为什么这样设计?在这两种情况下,我们不期待相同的结果吗?
我有一个像这样格式化的即时文件:
DateTimeFormatter formatter =
DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT )
.withLocale( Locale.UK )
.withZone( ZoneId.of("UTC"));
String instant = formatter.format(Instant.now()).toString();
Run Code Online (Sandbox Code Playgroud)
我想计算 Instant 和 Instant.now() 之间的天数、小时数和分钟数(如果可能),例如:
// for days
String daysBetween = Instant.now() - instant;
Run Code Online (Sandbox Code Playgroud)
我可以吗?
Java 17 中添加了一个新接口。java.time.InstantSource如果该接口的所有实现都是实现,那么该附加抽象的用例是什么Clock?
使用Java Date对象最简单的方法是将它们存储为MySql DateTime对象(UTC).切换到Instant这种方法将不再起作用,因为MySQL DateTime不提供存储纳秒的精度.只是截断它们可能会导致新创建的Instant对象与从数据库中读取的对象之间出现意外的比较结果.
BigDecimal时间戳不会让我成为一个优雅的解决方案:在MySql Workbench中编写select查询会变得更加困难,因为你必须将时间戳转换到任何地方以使其可读,并且Java中的处理与比较Instant甚至Long值相比有点笨拙.
什么是最好的方式去这里?可能不对varchar,对吧?