我有一个外部API返回我的日期为longs,表示自Epoch以来的毫秒数.
使用旧式Java API,我只需用Date它构造一个
Date myDate = new Date(startDateLong)
Run Code Online (Sandbox Code Playgroud)
Java 8 LocalDate/ LocalDateTimeclasses中的等价物是什么?
我有兴趣将长度所代表的时间点转换为long当前本地时区.
在我正在开发的应用程序中,我需要将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对象?
我有一个以字符串格式ddMMyyyy和hh:mm以及TimeZone存储在DB中的日期.我想根据这些信息创建一个Instant,但我不知道该怎么做.
就像是
LocalDateTime dateTime = LocalDateTime.of(2017, Month.JUNE, 1, 13, 39);
Instant instant = dateTime.toInstant(TimeZone.getTimeZone("ECT"));
Run Code Online (Sandbox Code Playgroud) 我一直在尝试使用Java 8中内置的java.time包将"DateTime"转换为毫秒.
但我无法正确地做到这一点.我想将"29/Jan/2015:18:00:00"转换为毫秒.以下是我尝试过的
Instant instant = Instant.parse("2015-01-29T18:00:00.0z");
Long instantMilliSeconds = Long.parseLong(instant.getEpochSecond() + "" + instant.get(ChronoField.MILLI_OF_SECOND));
System.out.println(new Date(instantMilliSeconds)); // prints Sun Jun 14 05:06:00 PDT 1970
Run Code Online (Sandbox Code Playgroud)
我尝试过使用LocalDateTime,但找不到有效转换为毫秒的方法.我并不是说这是最好的方法,如果你知道更好的东西,我会非常感谢一些指示.
我已经阅读了关于日期操作的所有其他Q/A,但它们似乎都没有给我满意的答案.
我有一个地理位置不同的用户项目,它Date在一些类和数据中使用.问题是我正在寻找一种有效的方法来操纵各自时区中不同用户的日期,大多数答案建议使用Joda库进行Date操作,这还不太明白,因为我还没有找到任何操作你不能用传统的Java做,所以如果有人可以解释我用Joda做什么不能用传统的Java做,那么我可以考虑使用它.
我终于开始使用System.currentTimeMillis()将日期保存到数据库(任何数据库)的方法.这样可以避免让我担心使用数据库存储日期的时区.如果我想查询数据库中的特定日期或日期范围,我会使用我想要查询的long值Date来执行查询:
SELECT * FROM table1 WHERE date1>=1476653369000
Run Code Online (Sandbox Code Playgroud)
然后,在检索时,ResultSet我会使用请求数据的用户的时区long将从数据库检索到的值格式化为可读Date.
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(resultSet.getLong(1));
cal.setTimeZone(TimeZone.getTimeZone("Asia/Calcutta"));
Date myDate = cal.getTime();
Run Code Online (Sandbox Code Playgroud)
根据我读过的一些观点,有些人强调说存储System.currentTimeMillis()肯定不是最好的做法,然而,由于某种原因,他们都错过了说为什么它不值得推荐.我错过了什么吗?这会导致转换的性能问题Long->Date/ Date->Long?有没有使用时无法实现任何使用情况下Long,而不是Date在数据库?有人可以发布关于此的理由解释吗?
另一方面,假设我继续使用Date值来存储数据库中的日期,有没有办法避免在处理数据库时担心时区Date?
提前致谢.
首先,我是这个令人难以置信的社区的新手。这是一个了不起的网站。我很高兴终于能参与其中。
每天我都必须在数据库中插入昨天的数据。比如今天5月22日,我要插入epoch时间21日00:00:00到23:59:59的数据。
到目前为止,我得到了从今天开始的纪元时间
long now = Instant.now().toEpochMilli();
Run Code Online (Sandbox Code Playgroud)
我怎么能得到昨天的纪元时间?并将小时范围存储在两个变量中?喜欢
String startDay = 21/05/2020 00:00:00
String endDay = 21/05/2020 23:59:59
Run Code Online (Sandbox Code Playgroud) 我正在尝试将 LocalDateTime 字段保存为 long,以便可以将其存储在 SQLite 数据库中。我怎样才能做到这一点?
var datetime = LocalDateTime.now()
var longdt: Long = getString(datetime).toLong()
Run Code Online (Sandbox Code Playgroud)