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

วิธีดึงวันของเดือน วันของปี วันของสัปดาห์ใน Android ด้วย OffsetDateTime

บทนำ: java.time.OffsetDateTime

OffsetDateTime แสดงวันเวลาพร้อม Offset จาก UTC (API 26+) เหมาะสำหรับงานที่ต้องการวันเวลาแม่นยำพร้อม Timezone

ตัวอย่าง: ดึง Day of Month, Day of Year, Day of Week

ขั้นตอนที่ 1-2: โปรเจกต์และ Layout

TextView ใน ConstraintLayout จัดกึ่งกลาง

ขั้นตอนที่ 3: MainActivity.java

package com.example.myapplication;

import android.os.Bundle;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
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.dateTextView);

        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
            OffsetDateTime offsetDateTime = OffsetDateTime.now();

            // ดึงข้อมูลต่างๆ
            int dayOfMonth = offsetDateTime.getDayOfMonth();   // 1-31
            int dayOfYear = offsetDateTime.getDayOfYear();     // 1-366
            java.time.DayOfWeek dayOfWeek = offsetDateTime.getDayOfWeek(); // Enum
            
            // แสดงผล
            String result = "Day of Week: " + dayOfWeek + "\n" +
                           "Day of Month: " + dayOfMonth + "\n" +
                           "Day of Year: " + dayOfYear + "\n" +
                           "Full: " + offsetDateTime;
            textView.setText(result);
        } else {
            textView.setText("ต้องการ Android 8.0 (API 26) ขึ้นไป");
        }
    }
}

คำอธิบายเมธอดสำคัญ

เมธอดคืนค่าตัวอย่าง
getDayOfMonth()int (1-31)15
getDayOfYear()int (1-366)15 (15 มกราคม)
getDayOfWeek()DayOfWeek EnumMONDAY, TUESDAY, ...
getMonth()Month EnumJANUARY
getYear()int2024
getHour()int (0-23)14
getOffset()ZoneOffset+07:00

DayOfWeek Enum ค่าที่เป็นไปได้

MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY

ใช้ dayOfWeek.getValue() ได้ค่า 1-7 (1=Monday, 7=Sunday ตาม ISO-8601)

การแปลงเป็นภาษาไทย

String thaiDay;
switch (dayOfWeek) {
    case MONDAY: thaiDay = "วันจันทร์"; break;
    case TUESDAY: thaiDay = "วันอังคาร"; break;
    case WEDNESDAY: thaiDay = "วันพุธ"; break;
    case THURSDAY: thaiDay = "วันพฤหัสบดี"; break;
    case FRIDAY: thaiDay = "วันศุกร์"; break;
    case SATURDAY: thaiDay = "วันเสาร์"; break;
    case SUNDAY: thaiDay = "วันอาทิตย์"; break;
    default: thaiDay = "";
}

OffsetDateTime vs ZonedDateTime

  • OffsetDateTime: วันเวลา + Offset คงที่ (ไม่มี DST)
  • ZonedDateTime: วันเวลา + Zone ID (มี DST rules)
  • สำหรับแอปทั่วไปในไทย: OffsetDateTime พอใช้ (ไทยไม่มี DST)

ผลลัพธ์

Day of Week: MONDAY
Day of Month: 15
Day of Year: 15
Full: 2024-01-15T14:30:45+07:00