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

Chuyển đổi ngày giờ thành số nguyên (timestamp) trong SQLite Android

strftime('%s', 'now') - Unix Timestamp

Hàm strftime('%s', ...) trả về số giây từ 1/1/1970 (Unix epoch). Dễ dàng so sánh, tính toán, lưu trữ dưới dạng INTEGER.

DatabaseHelper.java

public ArrayList<String> getAllContacts() {
    ArrayList<String> list = new ArrayList<>();
    SQLiteDatabase db = getReadableDatabase();
    
    // %s = Unix timestamp (giây)
    Cursor cursor = db.rawQuery(
        "SELECT id, name, salary, strftime('%s', 'now') as timestamp " +
        "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));
            long ts = cursor.getLong(3);
            list.add(id + " : " + name + " : " + salary + " : " + ts);
        } while (cursor.moveToNext());
    }
    cursor.close();
    return list;
}

Các định dạng strftime thường dùng

FormatKết quảMô tả
%s1704067200Unix timestamp (giây)
%Y2024Năm 4 chữ số
%m01Tháng (01-12)
%d31Ngày (01-31)
%H14Giờ 24h (00-23)
%M30Phút (00-59)
%S45Giây (00-59)
%Y-%m-%d %H:%M:%S2024-01-01 14:30:45Đầy đủ

Ứng dụng thực tế

-- Lấy timestamp hiện tại
SELECT strftime('%s', 'now');

-- Chuyển cột datetime sang timestamp
SELECT strftime('%s', created_at) FROM table;

-- Tìm bản ghi trong 24h qua
SELECT * FROM table 
WHERE strftime('%s', created_at) > strftime('%s', 'now', '-1 day');

-- Tính khoảng cách (giây)
SELECT strftime('%s', 'now') - strftime('%s', created_at) AS diff_seconds;

Kết quả

Chuyển đổi ngày giờ thành số nguyên (timestamp) trong SQLite Android

Hiển thị timestamp dạng số nguyên (giây) thay vì chuỗi ngày giờ.

Lưu ý

  • SQLite lưu ngày giờ dạng TEXT (ISO8601), REAL (Julian day), hoặc INTEGER (Unix timestamp).
  • Dùng INTEGER + strftime('%s') cho hiệu năng tốt nhất khi so sánh, index.
  • Java: System.currentTimeMillis()/1000 để lấy timestamp giây.