【问题标题】:Android - How can I store Date/Time to my database?Android - 如何将日期/时间存储到我的数据库中?
【发布时间】:2016-09-17 22:23:11
【问题描述】:

我正在尝试关注这个post,但我不确定如何以 iso8601 格式存储我的数据,因为我没有从时间选择器界面获得任何“秒”输入,我可以将“0000”附加到字符串生成器结束?

该帖子还使用了仅支持 API 24 的 SimpleDateFormat()。我的最低 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();
    }

谁能给我解释一下这部分代码,这是我第一次看到flags:

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);

【问题讨论】:

标签: android sqlite date time


【解决方案1】:

标志用于设置格式输出,以毫秒为单位传递给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:04”。

如果您有5,则在二进制中它将是101,这意味着将应用DateUtils.FORMAT_SHOW_TIMEDateUtils.FORMAT_SHOW_YEAR。但是,您将拥有“11:04pm”而不是“2016 年晚上 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"

【讨论】:

  • 我理解对了吗? formatDateTime 函数传递一个毫秒值。然后将其转换为二进制并放置在标志上?因此,如果我传递一个值 15(二进制 1111)作为参考代码,它将应用所有 4 个标志?
  • 没有。基本上(除了上下文)你有 2 个参数。第一个是时间,以毫秒为单位。秒是格式化标志。内部格式化程序(我猜是 DateInternalFormatter)使用这些标志来为您的时间参数定义格式化模板。然后这个模板为本地计算放入特殊的内部缓存,然后在代码深处的某个地方调用formateDateInterval,它将ms中的2个日期作为模板的参数和id传递。在您的情况下,两个日期都将相同。然后在本机代码中 ms 转换为漂亮的 String 并返回给你 :)
  • 您可以在此来源阅读更多内容:grepcode.com/file/repo1.maven.org/maven2/org.robolectric/…
猜你喜欢
  • 2019-04-01
  • 2011-09-26
  • 1970-01-01
  • 2011-04-17
  • 1970-01-01
  • 1970-01-01
  • 2019-12-19
  • 2011-07-18
  • 2014-01-16
相关资源
最近更新 更多