簡體   English   中英

從日歷中獲取格式化字符串

[英]Get formatted string from Calendar

我在 Java 中有一個Calendar日期。

我需要將其轉換為具有以下格式的String

2020-12-29T00:00:00+01:00

我該怎么做?

非常感謝你的幫助。

通過調用Calendar#getTime獲取Date object,並使用格式為yyyy-MM-dd'T'HH:mm:ssXXXSimpleDateFormat對其進行格式化。

注意:由於所需字符串的時區偏移量為+01:00 ,因此請確保在調用SimpleDateFormat#format之前將SimpleDateFormat object 的時區設置為TimeZone.getTimeZone("GMT+1")

演示:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;

public class Main {
    public static void main(String[] args) throws ParseException {
        Calendar calendar = Calendar.getInstance();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
        sdf.setTimeZone(TimeZone.getTimeZone("GMT+1"));
        Date date = calendar.getTime();
        String formatted = sdf.format(date);
        System.out.println(formatted);
    }
}

另一個例子:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;

public class Main {
    public static void main(String[] args) throws ParseException {
        String dateTimeString = "2020-12-29T00:00:00+01:00";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
        Date obj = sdf.parse(dateTimeString);
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(obj);

        // Formatting this calendar object
        Date date = calendar.getTime();
        sdf.setTimeZone(TimeZone.getTimeZone("GMT+1"));
        String formatted = sdf.format(date);
        System.out.println(formatted);
    }
}

Output:

2020-12-29T00:00:00+01:00

java.時間

我建議您使用 java.time,現代 Java 日期和時間 API,用於日期和時間工作。

這是您所需格式的格式化程序:

private static final DateTimeFormatter formatter
        = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssXXX");

有了這個我們可以做:

    ZoneId zone = ZoneId.of("Asia/Barnaul");
    ZonedDateTime dateTime
            = LocalDate.of(2020, Month.DECEMBER, 29).atStartOfDay(zone);
    String formatted = dateTime.format(formatter);
    System.out.println(formatted);

這個例子中的 Output 是:

2020-12-29T00:00:00+07:00

如果您無法避免獲得日歷

如果您從遺留的 API 獲得Calendar object 而您現在無法升級到 java.time,請將其轉換為ZonedDateTime 幾乎可以肯定它確實是一個GregorianCalendar (或者格式化成那種格式沒有多大意義),這使得轉換變得簡單明了。

    Calendar yourCalendar = getCalendarFromLegacyApi();
    ZonedDateTime dateTime
            = ((GregorianCalendar) yourCalendar).toZonedDateTime();

rest 與之前一樣,output 也是如此。

如果您需要考慮Calendar不是GregorianCalendar的可能性,請改用這個稍微復雜一些的轉換:

    ZonedDateTime dateTime = yourCalendar.toInstant()
            .atZone(yourCalendar.getTimeZone().toZoneId());

關聯

Oracle 教程:日期時間解釋如何使用 java.time。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM