【问题标题】:Best way to store date and time in Sqlite database in Android to perform date operations easily在 Android 的 Sqlite 数据库中存储日期和时间以轻松执行日期操作的最佳方法
【发布时间】:2016-07-11 16:31:02
【问题描述】:

我想存储用户通过 Android 上的日期选择器和时间选择器选择的日期和时间。通过阅读各种线程,我得出结论以整数格式存储日期和时间。所以我使用以下函数将它们转换为长值,但是当我将它们转换回日期时,它给了我错误的日期。

private DatePickerDialog.OnDateSetListener startDatePickerListener = new DatePickerDialog.OnDateSetListener(){

    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
        String dateText = getTimeString(year,monthOfYear,dayOfMonth);
        //Converting Date to long so that can be stored in DB
        long date = Utility.getDateLong(year,monthOfYear,dayOfMonth);
        taskModel.setStartDate(date);
        startDateView.setText(dateText);
    }
};

 public static long getDateLong(int year, int month, int day){
    Calendar cal = new GregorianCalendar(year, month, day);
    long timeStamp = (cal.getTimeInMillis()+cal.getTimeZone().getOffset(cal.getTimeInMillis()))/1000;
    return timeStamp;
}

要将长值转换回日期,我使用以下函数:

public static String getDateFromLongValue(long d){
    Date date = new Date(d);
    DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
    String formattedDate = dateFormat.format(date);
    return formattedDate;
}

但这给了我与输入值不同的日期。有没有其他方法可以做到这一点。我基本上需要比较日期并找出两个日期之间经过的时间?

【问题讨论】:

  • 我使用 TimeStrings (see)。有人更喜欢整数。选择你的方法。
  • 为什么不使用公历,同时再次转换回来以确保您考虑到时区偏移量??
  • 我喜欢在数据库中存储日期时使用纪元时间。然后做转换客户端/前端

标签: android sqlite date time


【解决方案1】:

我建议重复,因为虽然“最佳方式”在理论上值得商榷,但 SQLite 提供 date functions 是因为 SQLite 没有时间和日期类型,但确实提供基于 ISO 格式的 TEXT 时间戳的日期函数。

一个绝对不是意见问题的项目是您想要执行大部分操作的地方。你有两个选择:

  1. 查询大量数据,然后在您的应用中过滤这些数据
  2. 查询该数据的子集

如果您不通过查询预过滤数据集(即使用 ISO 格式文本时间戳的日期和时间函数)并选择在 Java 中转换 epoch。

【讨论】:

    猜你喜欢
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    • 2016-05-27
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    • 2014-01-18
    相关资源
    最近更新 更多