Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Sử dụng TIME() với giờ địa phương trong SQLite Android

Hàm TIME() trong SQLite

TIME() trích xuất phần giờ (HH:MM:SS) từ chuỗi ngày giờ. Kết hợp modifier 'localtime' chuyển UTC → giờ địa phương.

DatabaseHelper.java

public ArrayList<String> getAllContacts() {
    ArrayList<String> list = new ArrayList<>();
    SQLiteDatabase db = getReadableDatabase();
    
    // time(datetime, 'localtime') lấy giờ địa phương từ cột datetime
    Cursor cursor = db.rawQuery(
        "SELECT id, name, salary, TIME(datetime, 'localtime') as local_time " +
        "FROM " + TABLE_NAME, null);

    if (cursor.moveToFirst()) {
        do {
            int id = cursor.getInt(0);
            String name = cursor.getString(1);
            String salary = new String(cursor.getBlob(2));
            String localTime = cursor.getString(3);
            list.add(id + " : " + name + " : " + salary + " : " + localTime);
        } while (cursor.moveToNext());
    }
    cursor.close();
    return list;
}

Các modifier của TIME() / DATETIME()

ModifierVí dụKết quả
'localtime'TIME('now', 'localtime')Giờ địa phương thiết bị
'utc'TIME('now', 'utc')Giờ UTC
'+N hours'TIME('now', '+3 hours')Cộng 3 giờ
'-N minutes'TIME('now', '-30 minutes')Trừ 30 phút
'start of day'TIME('now', 'start of day')00:00:00 hôm nay
'start of month'DATE('now', 'start of month')Ngày 1 tháng này

Kết hợp DATE() và TIME()

-- Tách ngày và giờ từ cột datetime
SELECT 
    DATE(created_at) as ngay,
    TIME(created_at) as gio,
    DATE(created_at, 'localtime') as ngay_local,
    TIME(created_at, 'localtime') as gio_local
FROM SalaryDetails;

Kết quả

Sử dụng TIME() với giờ địa phương trong SQLite Android

Hiển thị giờ địa phương (HH:MM:SS) từ cột datetime đã lưu.

Lưu ý

  • Cột datetime lưu DEFAULT CURRENT_TIMESTAMP → giá trị UTC.
  • TIME(datetime, 'localtime') chuyển đổi tại thời điểm QUERY, không thay đổi dữ liệu gốc.
  • Nếu muốn lưu giờ địa phương: INSERT TIME('now', 'localtime') hoặc dùng trigger.
  • Android: TimeZone.getDefault() ảnh hưởng đến 'localtime'.