为了账号安全,请及时绑定邮箱和手机立即绑定

从毫秒开始错误的一天

从毫秒开始错误的一天

呼啦一阵风 2023-02-16 14:23:23
我像这样从 Sqlite 获取时间戳:"timestamp" + " TIMESTAMP DEFAULT CURRENT_TIMESTAMP );"这就是我获取日期的方式:2019-06-23 04:25:28 我正在转换以获取日期,我得到的是 18070 而不是 int dayString timestamp = cursor.getString(cursor.getColumnIndex(VentasContract.TIME_STAMP));                Log.d("TIEMPO",timestamp);                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");                Date date = sdf.parse(timestamp);                long millis = date.getTime();                long days = (millis / (60*60*24*1000));                Log.d("DIA",String.valueOf(days));  // The value of TIEMPO is 2019-06-23 04:25:28  // The value of DIA is 18070我希望今天是“23”
查看完整描述

2 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

博士

myResultSet.getObject( … , OffsetDateTime.class ).getDayOfMonth()

23

细节

将遗留java.sql.Timestamp对象转换为现代java.time.Instant对象,而不是隐式调用toString.

Instant instant = myTimestamp.toInstant() ;

调整到您想要感知日期和时间的时区。也许这就是 UTC 本身。

OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC ) ;

提取一个月中的第几天。

int dom = odt.getDayOfMonth() ;

23

提示:可怕的java.sql.Timestamp类在多年前已被 JDBC 4.2 取代。我们现在可以与数据库交换现代java.time对象。

OffsetDateTime odt = myResultSet.getObject( … , OffsetDateTime.class ) ;


查看完整回答
反对 回复 2023-02-16
?
千万里不及你

TA贡献1784条经验 获得超9个赞

Date#getTime()返回自 1970 年 1 月 1 日 00:00:00 GMT 以来的毫秒数,由此 Date 对象表示。

这与本月的第几天完全不同。

您应该使用Calendarclass 或 switch 来使用 java 8 LocalDateclass of java.timepackage。


查看完整回答
反对 回复 2023-02-16
  • 2 回答
  • 0 关注
  • 96 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信