【问题标题】:Android Sqlite datetime and strftime all returns wrong datesAndroid Sqlite datetime 和 strftime 都返回错误的日期
【发布时间】:2015-12-28 21:04:15
【问题描述】:

我的表结构是这样的:

protected static final String EXPENSE_TABLE = "Expense";
protected static final String EXPENSE_ID = "_id";
protected static final String EXPENSE_AMOUNT= "Amount";
protected static final String EXPENSE_CATEGORY ="Category";
protected static final String EXPENSE_SUBCATEGORY ="SubCategory";
protected static final String EXPENSE_REASONCATEGORY ="ReasonCategory";
protected static final String EXPENSE_DATE ="Date";
protected static final String EXPENSE_EVENT ="Event";
protected static final String CREATE_EXPENSE_TABLE = "CREATE TABLE "+ EXPENSE_TABLE +"(" +
        ""+ EXPENSE_ID +" INTEGER PRIMARY KEY AUTOINCREMENT," +
        ""+ EXPENSE_AMOUNT +" REAL NOT NULL ," +
        ""+ EXPENSE_CATEGORY +" VARCHAR(50) NOT NULL," +
        ""+ EXPENSE_SUBCATEGORY +" VARCHAR(50)  NULL," +
        ""+ EXPENSE_REASONCATEGORY +" VARCHAR(50) NULL ," +
        ""+ EXPENSE_DATE +" DATE NOT NULL," +
        ""+ EXPENSE_EVENT +" VARCHAR(50)" +
        ");";

我的插入查询:

 String sql = "INSERT INTO "+DbHelper.EXPENSE_TABLE +"" +
            "("+DbHelper.EXPENSE_AMOUNT +","+DbHelper.EXPENSE_CATEGORY +","+DbHelper.EXPENSE_SUBCATEGORY+"," +
            " "+DbHelper.EXPENSE_REASONCATEGORY +","+DbHelper.EXPENSE_DATE+","+DbHelper.EXPENSE_EVENT+") " +
            "values(?,?,?,?,?,?)";
    db.beginTransaction();
    SQLiteStatement stmt = db.compileStatement(sql);

    stmt.bindDouble(1, e.getAmount());
    stmt.bindString(2,e.getCategory());
    stmt.bindString(3,e.getNote());
    stmt.bindString(4, e.getReasonCategory());
    stmt.bindLong(5, e.getDate());
    stmt.bindString(6,e.getEvent());

    e.setId(stmt.executeInsert());
    stmt.clearBindings();

    db.setTransactionSuccessful();
    db.endTransaction();
    return e.getId();

当我插入这个表时,我在那里插入long 值。您可以在下面找到我的插入查询。如您所见,我为日期绑定了long。当我创建表时,该字段创建为date,但我将其插入为long,就像我在网上找到的一样。但是来自 sqlite 的结果(当我使用该 sqlite 函数时)要么是模糊的,要么是空的,例如 24-11--471 11:59:59 或 '01-01-1970' 等。当我将 long 字段转换为 SimpleDateFormat 时看起来不错。结果是真的所以由于 sqlite 解释 long 错误,我无法编写复杂的查询。

【问题讨论】:

    标签: android sqlite datetime


    【解决方案1】:
      strftime('%Y-%m', milliseconds / 1000, 'unixepoch') did the trick
    

    划分 bby /1000 并添加 'unixepoch' 修复了它。我一直在寻找的是迄今为止的长期转换

    【讨论】:

      【解决方案2】:

      数据库存储可能会有点毛茸茸。在我看来,将数据存储为字符串,然后将其转换回 long 或 int(您想要的任何类型)

      使用此方法从安卓系统获取日期。然后存入数据库

      @SuppressLint("SimpleDateFormat")
      private static String getTime() {
          //for date only
          String pattern = "yyyy-MM-dd";
          //or the one below for time and date
          String pattern2 = "yyyy-MM-dd HH:mm:ss ";
          SimpleDateFormat formatter = new SimpleDateFormat(pattern);
          String key = formatter.format(new Date());
          return key;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多