将XMLGregorianCalendar转换为日期,即“MM/DD/YYYY hh:mm:ss AM”。

35
我有一个XMLGregorianCalendar格式的日期,格式为"2013-05-16T09:54:13",我需要将其转换为"MM/DD/YYYY hh:mm:ss AM"格式的时间戳,并在使用Java插入Oracle数据库表中。
请问如何在Java中实现此功能?

一个与https://dev59.com/v3NA5IYBdhLWcg3wpfiu相同的副本,Java中不同格式的字符串转日期。 - AurA
您在插入数据库之前没有格式化时间戳。您使用了java.util.Date类。 - Danubian Sailor
8个回答

68
您可以通过以下方式返回一个 Date
calendar.toGregorianCalendar().getTime()

我从这个教程中找到了这段代码。从那里,你可以使用SimpleDateFormat将其转换为所需的字符串格式。
但是,如果你正在使用JDBC将日期保存在数据库中,你可能可以直接使用此方法传递Date
preparedStatement.setDate(colNum, myDate);

3
我看不到 getTime() 方法。你是在说与 http://docs.oracle.com/javase/7/docs/api/javax/xml/datatype/XMLGregorianCalendar.html 不同的包吗? - ilinca
4
@ilinca,getTime() 方法属于 GregorianCalendar 类。你需要使用 .toGregorianCalendar() 方法将 XMLGregorianCalendar 解析为 GregorianCalendar,就像上面展示的那样。 - Mathter

9

以下是更加清晰的解答:

从XMLGregorianCalendar实例获取Date实例:

Date date = xmlCalendar.toGregorianCalendar().getTime();

我发现这段代码来自在Java中将XMLGregorianCalendar转换为日期

使用格式“MM/dd/yyyy hh:mm:ss a”格式化该日期实例,您将获得“MM/DD/YYYY hh:mm:ss AM”格式

DateFormat  formatter = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss a");
String formattedDate  = formatter.format(date)

来自Java中将日期转换为字符串

如果要插入数据库,您可以按照Daniel的建议进行操作。


3
如果您想将日期插入数据库,我建议先按照Daniel的建议操作:
XMLGregorianCalendar xgc=<assume this is initialized>;
Date timestamp=xgc.toGregorianCalendar().getTime();

然后将其作为毫秒级(Epoch时间)时间戳通过PreparedStatement插入。这样,您就不会丢失精度。

preparedStatement.setTimestamp(colNum,new Timestamp(timestamp.getTime()));

1

tl;dr

myPreparedStatement.setObject( 
    … , 
    myXGC.toGregorianCalendar()
         .toZonedDateTime()
) ;

java.time

现代方法使用java.time类替换了麻烦的旧类Date、Calendar和GregorianCalendar。将遗留类转换为java.time。
GregorianCalendar gc = myXGC.toGregorianCalendar() ;
ZonedDateTime zdt = gc.toZonedDateTime();

将日期时间值作为日期时间对象而不是字符串传递给您的数据库。如果您的JDBC驱动程序符合JDBC 4.2及更高版本,则可以直接处理java.time类型。
myPreparedStatement.setObject( … , zdt ) ;

如果您的驱动程序尚未兼容,请简要转换为java.sql类型。
myPreparedStatement.setTimestamp( … , java.sql.Timestamp.from ( zdt.toInstant() ) ) ;

0
请使用以下函数 - 只需传递XMLGregorianCalendar实例和所需的日期格式(例如格式:“DD MMMM yyyy” -> 01 January 2017)
public String parseDate(String format,XMLGregorianCalendar XMLdate){
    Date date = XMLdate.toGregorianCalendar().getTime();
    DateFormat  formatter = new SimpleDateFormat(format);
    String formattedDate  = formatter.format(date);
    return formattedDate;
}

0

这将返回java.util.Date:

java.util.Date tempDate = issueDate.toGregorianCalendar().getTime();

0

0

您可以使用以下两行代码将XMLGregorianCalendar转换为java.util.Date对象:

Date date = xmlDate.toGregorianCalendar().getTime();
System.out.println("java.util.date :- " + date);

要将其转换为java.sql.Date对象,请使用以下代码:

long time = xmlDate.toGregorianCalendar().getTime().getTime();
java.sql.Date sqlDate = new java.sql.Date(time);

你可以在这里看到完整的示例here

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接