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

Cách chuyển đổi mili-giây sang định dạng ngày tháng trong Android

Giới thiệu

Ví dụ này minh họa cách chuyển đổi giá trị timestamp (mili-giây từ epoch) sang định dạng ngày tháng dễ đọc (dd/MM/yyyy) trong Android sử dụng SimpleDateFormat.

Các bước thực hiện

Bước 1: Tạo dự án mới

Mở Android Studio, chọn File → New Project.

Bước 2: Thiết kế giao diện (res/layout/activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="4dp"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="24sp"
        android:textStyle="bold" />

</LinearLayout>

Bước 3: Viết code logic (src/MainActivity.java)

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import java.text.SimpleDateFormat;
import java.util.Locale;

public class MainActivity extends AppCompatActivity {
    TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textView = findViewById(R.id.textView);
        getDate();
    }

    private void getDate() {
        // Định dạng ngày tháng
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy", Locale.getDefault());

        // Timestamp mẫu (mili-giây)
        long timestamp = 9897546853323L;

        String dateString = simpleDateFormat.format(timestamp);
        textView.setText(String.format("Ngày: %s", dateString));
    }
}

Bước 4: Cấu hình Manifest (androidManifest.xml)

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="app.com.sample">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
</manifest>

Chạy ứng dụng

Kết nối thiết bị, nhấn Run. TextView sẽ hiển thị ngày tháng tương ứng với timestamp.

Cách chuyển đổi mili-giây sang định dạng ngày tháng trong Android

Các định dạng phổ biến khác

PatternKết quả ví dụ
dd/MM/yyyy31/12/2023
yyyy-MM-dd2023-12-31
HH:mm:ss14:30:45
dd MMM yyyy31 Th12 2023
EEEE, dd MMMM yyyyChủ nhật, 31 Tháng 12 2023

Lưu ý quan trọng

  • SimpleDateFormat không thread-safe: Không chia sẻ instance giữa các luồng. Tạo mới mỗi lần dùng hoặc dùng ThreadLocal.
  • Locale: Luôn truyền Locale.getDefault() hoặc Locale cụ thể để tránh lỗi định dạng theo vùng域.
  • API 24+ (Android 7.0+): Nên sử dụng java.time (DateTimeFormatter, Instant, LocalDateTime) - hiện đại, immutable, thread-safe.

Ví dụ với java.time (API 26+ hoặc dùng desugaring)

import java.time.Instant;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

// ...
Instant instant = Instant.ofEpochMilli(timestamp);
String formatted = DateTimeFormatter.ofPattern("dd/MM/yyyy", Locale.getDefault())
        .withZone(ZoneId.systemDefault())
        .format(instant);