Android - 如何将日期/时间存储到我的数据库?

时间:2016-09-17 22:23:11

标签: android sqlite date time

我正在尝试遵循此post但我不确定如何以iso8601格式存储我的数据,因为我没有得到任何"秒"从timepicker界面输入,我可以追加" 0000"到字符串生成器的末尾?

该帖子还使用SimpleDateFormat(),仅支持API 24。我的最低API级别是19.它是否有相同的功能?

Java代码:

public void saveExam() {
        date = (DatePicker)findViewById(R.id.examDate);
        Integer day = date.getDayOfMonth();
        Integer month = date.getMonth();
        Integer year = date.getYear();

        time = (TimePicker)findViewById(R.id.examTime);
        Integer hour, minutes;
        if (Build.VERSION.SDK_INT >= 23 ) {
            hour = time.getHour();
            minutes = time.getMinute();
        } else {
            hour = time.getCurrentHour();
            minutes = time.getCurrentMinute();
        }

        StringBuilder temp = new StringBuilder();
        temp.append(year.toString()).append("-").append(month.toString()).append("-").append(day.toString())
                    .append(" ").append(hour).append(":").append(minutes);

        Toast.makeText(add_exam.this, temp, Toast.LENGTH_LONG).show();
    }

有人也可以向我解释这部分代码,这是我第一次看到标志:

if (date != null) {
    long when = date.getTime();
    int flags = 0;
    flags |= android.text.format.DateUtils.FORMAT_SHOW_TIME;
    flags |= android.text.format.DateUtils.FORMAT_SHOW_DATE;
    flags |= android.text.format.DateUtils.FORMAT_ABBREV_MONTH;
    flags |= android.text.format.DateUtils.FORMAT_SHOW_YEAR;

    finalDateTime = android.text.format.DateUtils.formatDateTime(context,
        when + TimeZone.getDefault().getOffset(when), flags);

1 个答案:

答案 0 :(得分:0)

标志用于设置格式输出,传入DateUtils.formateDateTime方法的时间以毫秒为单位。它们代表位掩码的一部分。 Here您可以在DateUtils中看到用于格式化日期的不同标志值。

例如:

DateUtils.FORMAT_SHOW_TIME = 1; // 1 binary representation
DateUtils.FORMAT_SHOW_WEEKDAY = 2; // 10 binary representation
DateUtils.FORMAT_SHOW_YEAR = 4; // 100 binary representation
...

如果你有3,则二进制文件为11,这意味着DateUtils.FORMAT_SHOW_TIMEDateUtils.FORMAT_SHOW_WEEKDAY将被应用,你会得到类似这样的结果:“11 :周六下午4点“。

如果您有5,则二进制文件为101,这意味着将应用DateUtils.FORMAT_SHOW_TIMEDateUtils.FORMAT_SHOW_YEAR。但不是像“2016年下午11:04”这样的东西,你将有“晚上11:04”。因此,据我所知,组合标志时会发生一些冲突。

基本上,有下一个组合标志和相应输出的例子:

DateUtils.formatDateTime(this, System.currentTimeMillis(), DateUtils.FORMAT_SHOW_TIME) = "10:58pm"
DateUtils.formatDateTime(this, System.currentTimeMillis(), DateUtils.FORMAT_SHOW_DATE) = "September 17"
DateUtils.formatDateTime(this, System.currentTimeMillis(), DateUtils.FORMAT_ABBREV_MONTH) = "Sep 17"
DateUtils.formatDateTime(this, System.currentTimeMillis(), DateUtils.FORMAT_SHOW_YEAR) = "September 17, 2016"
DateUtils.formatDateTime(this, System.currentTimeMillis(), DateUtils.FORMAT_SHOW_YEAR | DateUtils.FORMAT_SHOW_DATE) = "September 17, 2016"
DateUtils.formatDateTime(this, System.currentTimeMillis(), DateUtils.FORMAT_SHOW_YEAR | DateUtils.FORMAT_ABBREV_MONTH) = "Sep 17, 2016"
DateUtils.formatDateTime(this, System.currentTimeMillis(), DateUtils.FORMAT_SHOW_YEAR | DateUtils.FORMAT_ABBREV_MONTH | DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_TIME) = "11:00pm, Sep 17, 2016"
DateUtils.formatDateTime(this, System.currentTimeMillis(), DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_ABBREV_MONTH) = "Sep 17"
DateUtils.formatDateTime(this, System.currentTimeMillis(), DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_YEAR) = "11:03pm"
DateUtils.formatDateTime(this, System.currentTimeMillis(), DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_WEEKDAY) = "11:04pm, Saturday"
DateUtils.formatDateTime(this, System.currentTimeMillis(), DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_DATE) = "11:04pm, September 17"