Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Android

วิธีดึง Local Date จาก OffsetDateTime ใน Android

ตัวอย่างนี้แสดงวิธีการใช้ OffsetDateTime API (Java 8 Time API) เพื่อดึง Local Date ปัจจุบันใน Android ต้องการ API 26+ (Android 8.0 Oreo) หรือใช้ API Desugaring สำหรับ API ต่ำกว่า

ขั้นตอนที่ 1: สร้างโปรเจกต์ใหม่

เปิด Android Studio ไปที่ File → New Project

ขั้นตอนที่ 2: เพิ่ม Layout XML

เพิ่มโค้ดใน res/layout/activity_main.xml ใช้ ConstraintLayout:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:app="https://schemas.android.com/apk/res-auto"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <TextView
        android:id="@+id/date"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Local Date"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        android:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>

ขั้นตอนที่ 3: เพิ่มโค้ด Java

เพิ่มโค้ดใน src/MainActivity.java:

package com.example.myapplication;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;
import java.time.OffsetDateTime;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView textView = findViewById(R.id.date);
        
        // ตรวจสอบ API Level (ต้องการ 26+)
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            OffsetDateTime offset = OffsetDateTime.now();
            // ดึง Local Date (ไม่รวมเวลาและ Timezone)
            textView.setText(String.valueOf(offset.toLocalDate()));
        } else {
            textView.setText("Requires API 26+");
        }
    }
}
เกี่ยวกับ Java 8 Time API ใน Android:
  • OffsetDateTime - วันที่/เวลาพร้อม Offset (เช่น 2024-01-15T10:30+07:00)
  • toLocalDate() - ดึงเฉพาะวันที่ (2024-01-15)
  • toLocalTime() - ดึงเฉพาะเวลา (10:30)
  • toLocalDateTime() - ดึงวันที่/เวลาโดยไม่มี Offset
  • toInstant() - แปลงเป็น Instant (UTC)

การใช้งานกับ API ต่ำกว่า 26 (API Desugaring)

ใน build.gradle (Module: app) เพิ่ม:

android {
    defaultConfig {
        multiDexEnabled true
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    // เปิดใช้งาน Core Library Desugaring
    coreLibraryDesugaringEnabled true
}

dependencies {
    coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.2.2'
    // ...
}

แล้ว Sync Gradle - จะสามารถใช้ java.time.* ได้ใน API 21+

การทดสอบ

รันแอปพลิเคชัน จะแสดงวันที่ปัจจุบันในรูปแบบ YYYY-MM-DD (เช่น 2024-01-15)

วิธีดึง Local Date จาก OffsetDateTime ใน Android

ในผลลัพธ์ แสดงวันที่ปัจจุบัน (Local Date)