gpt4 book ai didi

Android - 如何在 SQLite 中存储日期和时间 "properly"?

转载 作者:太空狗 更新时间:2023-10-29 15:44:57 26 4
gpt4 key购买 nike

我已经阅读了一些关于这个问题的其他帖子。大多数答案建议将日期/时间数据转换为某种格式 (UTC) 并将其存储在字符串数据类型中。

将它们以整数格式存储并为每个数据(年、月、日、小时、分钟)存储 1 列是否“合适”?或者这是 Not Acceptable ?因为这将使与当前日期/时间的比较更容易。我打算做的是一行数据是否超过当前日期。

Java代码:

public void saveExam() {
date = (DatePicker)findViewById(R.id.examDate);
Integer day = date.getDayOfMonth();
Integer month = date.getMonth();
Integer year = date.getYear();
StringBuilder temp = new StringBuilder();
temp.append(day.toString()).append("/").append(month.toString()).append("/").append(year.toString());
String dateStr = temp.toString();

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();
}
temp = new StringBuilder();
temp.append(hour.toString()).append(":").append(minutes.toString());
String timeStr = temp.toString();

Toast.makeText(add_exam.this, dateStr + ", " + timeStr, Toast.LENGTH_LONG).show();
}

最佳答案

根据 Sqlite documentation (section 2.2) ,您应该以下列方式之一存储您的日期:

  • ISO8601 字符串形式的文本(“YYYY-MM-DD HH:MM:SS.SSS”)。
  • 真实如儒略日数字。
  • 作为 Unix 时间的整数,自 1970-01-01 00:00:00 UTC 以来的秒数。

可以使用 strftime 解决比较问题允许您比较日期的函数,而不管它们的存储类型(TEXT、REAL 或 INTEGER)。

假设您想要获取数据库中日期为 Jenuary 的所有行。你可以这样做:

SELECT * FROM table
WHERE strftime('%m', your_date_column) == '01'

或者您可能想要获取时间为 09:40 的所有行:

SELECT * FROM table
WHERE strftime('%H:%M', your_date_column) == '09:40'

或者还有:

SELECT * FROM table
WHERE strftime('%s', your_date_column) < strftime('%s','now')

将返回所有日期早于当前日期(现在)的行。

SUMMARY:函数strftime抽象了数据库存储模式,所以它并不真正决定你使用哪种模式。

关于Android - 如何在 SQLite 中存储日期和时间 "properly"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39546541/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com