我有一个 Calendar java中的日期。我需要把它转换成 String 使用此格式:
Calendar
String
2020-12-29T00:00:00+01:00
我该怎么做?非常感谢你的帮助。
gv8xihay1#
去拿那个 Date 通过调用 Calendar#getTime 并使用 SimpleDateFormat 按照格式, yyyy-MM-dd'T'HH:mm:ssXXX .注意:由于所需字符串的时区偏移为 +01:00 小时,确保你设置了 SimpleDateFormat 反对 TimeZone.getTimeZone("GMT+1") 打电话之前 SimpleDateFormat#format .演示:
Date
Calendar#getTime
SimpleDateFormat
yyyy-MM-dd'T'HH:mm:ssXXX
+01:00
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); } }
输出:
oknwwptz2#
我建议您在日期和时间工作中使用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);
此示例的输出为:2020-12-29t00:00:00+07:00
如果你得到一个 Calendar 对象,您无法将其升级到java.time,请将其转换为 ZonedDateTime . 几乎可以肯定,这是一个真正的 GregorianCalendar (或者格式化成这种格式没有多大意义),这使得转换变得简单。
ZonedDateTime
GregorianCalendar
Calendar yourCalendar = getCalendarFromLegacyApi(); ZonedDateTime dateTime = ((GregorianCalendar) yourCalendar).toZonedDateTime();
其余的和以前一样,输出也一样。如果你需要考虑 Calendar 不是一个 GregorianCalendar ,请使用此稍微复杂的转换:
ZonedDateTime dateTime = yourCalendar.toInstant() .atZone(yourCalendar.getTimeZone().toZoneId());
oracle教程:date time解释如何使用java.time。
2条答案
按热度按时间gv8xihay1#
去拿那个
Date
通过调用Calendar#getTime
并使用SimpleDateFormat
按照格式,yyyy-MM-dd'T'HH:mm:ssXXX
.注意:由于所需字符串的时区偏移为
+01:00
小时,确保你设置了SimpleDateFormat
反对TimeZone.getTimeZone("GMT+1")
打电话之前SimpleDateFormat#format
.演示:
另一个例子:
输出:
oknwwptz2#
java.time文件
我建议您在日期和时间工作中使用java.time,即现代的java日期和时间api。
以下是所需格式的格式化程序:
我们可以这样做:
此示例的输出为:
2020-12-29t00:00:00+07:00
如果你不能避免得到一个日历
如果你得到一个
Calendar
对象,您无法将其升级到java.time,请将其转换为ZonedDateTime
. 几乎可以肯定,这是一个真正的GregorianCalendar
(或者格式化成这种格式没有多大意义),这使得转换变得简单。其余的和以前一样,输出也一样。
如果你需要考虑
Calendar
不是一个GregorianCalendar
,请使用此稍微复杂的转换:链接
oracle教程:date time解释如何使用java.time。