有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从millis获取错误的整数天

我从Sqlite获得的时间戳如下:

"timestamp" + " TIMESTAMP DEFAULT CURRENT_TIMESTAMP );"

这是我获取日期的方式:2019-06-23 04:25:28 我正在转变,以获得这些日子 我得到的是18070而不是整数日

String 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) 个答案

  1. # 1 楼答案

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

    这与一个月中的某一天大不相同

    您应该使用Calendar类或开关来使用java.time包的Java8LocalDate

  2. # 2 楼答案

    tl;博士

    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类在几年前被JDBC4.2取代。我们现在可以交换现代java了。数据库中的时间对象

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