从日历中获取格式化字符串
Get formatted string from Calendar
我在 Java 有一个 Calendar
日期。
我需要将其转换为 String
格式:
2020-12-29T00:00:00+01:00
我该怎么做?
非常感谢您的帮助。
通过使用 yyyy-MM-dd'T'HH:mm:ssXXX
.
格式调用 Calendar#getTime
and format it using a SimpleDateFormat
获取 Date
对象
注意: 由于所需字符串的时区偏移量为 +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.time
我建议您使用 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);
此示例 snipoet 的输出是:
2020-12-29T00:00:00+07:00
如果您无法避免获得日历
如果您从遗留 API 中获取一个 Calendar
对象,而您现在无法负担升级到 java.time 的费用,请将其转换为 ZonedDateTime
。几乎可以肯定它确实是一个 GregorianCalendar
(或者格式化成那种格式没有多大意义),这使得转换很简单。
Calendar yourCalendar = getCalendarFromLegacyApi();
ZonedDateTime dateTime
= ((GregorianCalendar) yourCalendar).toZonedDateTime();
其余如前,输出亦然。
如果您需要考虑 Calendar
不是 GregorianCalendar
的可能性,请改用这个稍微复杂一点的转换:
ZonedDateTime dateTime = yourCalendar.toInstant()
.atZone(yourCalendar.getTimeZone().toZoneId());
Link
Oracle tutorial: Date Time 解释如何使用 java.time。
我在 Java 有一个 Calendar
日期。
我需要将其转换为 String
格式:
2020-12-29T00:00:00+01:00
我该怎么做?
非常感谢您的帮助。
通过使用 yyyy-MM-dd'T'HH:mm:ssXXX
.
Calendar#getTime
and format it using a SimpleDateFormat
获取 Date
对象
注意: 由于所需字符串的时区偏移量为 +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.time
我建议您使用 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);
此示例 snipoet 的输出是:
2020-12-29T00:00:00+07:00
如果您无法避免获得日历
如果您从遗留 API 中获取一个 Calendar
对象,而您现在无法负担升级到 java.time 的费用,请将其转换为 ZonedDateTime
。几乎可以肯定它确实是一个 GregorianCalendar
(或者格式化成那种格式没有多大意义),这使得转换很简单。
Calendar yourCalendar = getCalendarFromLegacyApi();
ZonedDateTime dateTime
= ((GregorianCalendar) yourCalendar).toZonedDateTime();
其余如前,输出亦然。
如果您需要考虑 Calendar
不是 GregorianCalendar
的可能性,请改用这个稍微复杂一点的转换:
ZonedDateTime dateTime = yourCalendar.toInstant()
.atZone(yourCalendar.getTimeZone().toZoneId());
Link
Oracle tutorial: Date Time 解释如何使用 java.time。