2023年12月26日 星期二

Java 的 OffsetDateTime 和 Calendar 的互相轉換

 紀錄下 Java 的

OffsetDateTime 和 Calendar 的互相轉換

import java.text.SimpleDateFormat;
import java.time.OffsetDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;

public class DateTimeFormatterTest {

	public static void main(String[] args) {
		String timeStr = "2023-01-01T00:00:00+00:00";
		OffsetDateTime offsetDateTime = OffsetDateTime.parse(timeStr);
		//convert OffsetDateTime to Calendar
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(Date.from(offsetDateTime.toInstant()));
        
        //convert Calendar to OffsetDateTime
        //atOffset() 設多少不重要,因為都可以再用 DateTimeFormatter 顯示其他時區的日期文字 
        OffsetDateTime offsetDateTime2 = calendar.getTime()
        								 .toInstant()
        								 .atOffset(ZoneOffset.of("+0800"));
        
        //print date format string
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ")
        						.withZone(ZoneId.of("UTC+0300"));
        System.out.println(dtf.format(offsetDateTime2)); //2023-01-01T03:00:00+0300
	}
}