我Calendar
在 Java 中有一个日期。
我需要将其转换为String
以下格式:
2020-12-29T00:00:00+01:00
我该怎么做?
非常感谢你的帮助。
我Calendar
在 Java 中有一个日期。
我需要将其转换为String
以下格式:
2020-12-29T00:00:00+01:00
我该怎么做?
非常感谢你的帮助。
Date
通过调用获取对象,Calendar#getTime
并使用SimpleDateFormat
格式为yyyy-MM-dd'T'HH:mm:ssXXX
.
注意:由于所需字符串的时区偏移量为+01:00
小时,因此请确保在调用之前将SimpleDateFormat
对象的时区设置为。TimeZone.getTimeZone("GMT+1")
SimpleDateFormat#format
演示:
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);
}
}
输出:
2020-12-29T00:00:00+01:00
我建议您使用现代 Java 日期和时间 API java.time 进行日期和时间工作。
这是您所需格式的格式化程序:
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);
此示例 snipoet 的输出为:
2020-12-29T00:00:00+07:00
如果您Calendar
从遗留 API 获取对象,而您现在无法升级到 java.time,请将其转换为ZonedDateTime
. 几乎可以肯定它确实是一个GregorianCalendar
(或格式化成该格式没有多大意义),这使得转换变得简单。
Calendar yourCalendar = getCalendarFromLegacyApi();
ZonedDateTime dateTime
= ((GregorianCalendar) yourCalendar).toZonedDateTime();
其余的和以前一样,输出也是如此。
如果您需要考虑Calendar
不是 a的可能性GregorianCalendar
,请改用这个稍微复杂的转换:
ZonedDateTime dateTime = yourCalendar.toInstant()
.atZone(yourCalendar.getTimeZone().toZoneId());
Oracle 教程:日期时间解释如何使用 java.time。