[英]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:ssXXX
的SimpleDateFormat
對其進行格式化。
注意:由於所需字符串的時區偏移量為+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.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.