学习将 XMLGregorianCalendar
实例格式化为多种模式的字符串,例如“MM/dd/yyyy hh:mm a z
”在 Java 中使用 DateTimeFormatter 和 SimpleDateFormat 类。
在 Java 8 之前,日期和时间的标准 Java 方法是通过 Date
和 Calendar
类,解析和格式化日期的标准方法是通过 DateFormat
和 SimpleDateFormat
。
对于 Java 8,首选的日期/时间类位于 java.time
包中,例如LocalDate
、LocalDateTime
和 ZonedDateTime
。
同样,首选的日期/时间格式化/解析类不再位于 java.text
包中,而是来自 java.time.format
包。
除了这些类的使用方式和其中的方法之外,最显着的区别是并发应用程序中的行为。
SimpleDateFormat
不是线程安全的。DateTimeFormatter
是线程安全的。因此,总是有充分的理由使用DateTimeFormatter 而不是SimpleDateFormat。
从 Java 8 开始,最好的格式化方法是将日历实例转换为 ZonedDateTime,然后使用 DateTimeFormatter 对其进行格式化。 ZonedDateTime 对时区和偏移量的出色支持在处理多个区域设置时非常有用。
如果我们不需要语言环境信息,那么我们可以简单地将 ZonedDateTime 转换为 LocalDateTime 或 LocalDate 并打印本地化格式的输出。
使用 DateTimeFormatter 格式化 XMLGregorianCalendar 的 Java 程序。
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.GregorianCalendar;
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
public class Main
{
private final static String TIMESTAMP_PATTERN
= "MM/dd/yyyy hh:mm a z";
private final static DateTimeFormatter DATE_TIME_FORMATTER
= DateTimeFormatter.ofPattern(TIMESTAMP_PATTERN);
public static void main(String[] args)
throws DatatypeConfigurationException
{
GregorianCalendar cal = new GregorianCalendar();
cal.setTime(new Date());
XMLGregorianCalendar xgc = DatatypeFactory.newInstance()
.newXMLGregorianCalendar(cal);
//1. Convert XMLGregorianCalendar to ZonedDateTime in default timezone
ZonedDateTime zdt = xgc.toGregorianCalendar().toZonedDateTime();
System.out.println( DATE_TIME_FORMATTER.format(zdt) );
//2. Convert XMLGregorianCalendar to ZonedDateTime in UTC
ZonedDateTime zdtUTC = zdt.withZoneSameInstant(ZoneId.of("UTC"));
System.out.println( DATE_TIME_FORMATTER.format(zdtUTC) );
}
}
程序输出。
08/23/2019 01:53 PM GMT+05:30
08/23/2019 08:23 AM UTC
在下面的代码中,我们用当前的 XMLGregorianCalendar
对象创建了一个 Date
的实例。然后我们使用 SimpleDateFormat 将其格式化为字符串。
XMLGregorianCalendar xCal = ..; //Create instance
Date date = xCal.toGregorianCalendar().getTime();
DateFormat df = new SimpleDateFormat("MM/dd/yyyy hh:mm a z");
df.setTimeZone(TimeZone.getTimeZone("GMT"));
String formattedString = df.format(date);
System.out.println(formattedString);
输出:
02/18/2022 12:08 am IST
我们可以使用上面的代码以我们选择的任何模式将 XMLGregorianCalendar 实例格式化为字符串。
快乐学习!!
地址:https://www.cundage.com/article/format-xmlgregoriancalendar-to-date-pattern.html