34

我有一个 XMLGregorianCalendar 格式的日期,例如“2013-05-16T09:54:13”,我必须将其转换为时间戳“MM/DD/YYYY hh:mm:ss AM”,以便使用 java 插入到 oracle 数据库表中。

我怎么能在Java中做到这一点?

4

8 回答 8

64

您可以这样做以返回Date

calendar.toGregorianCalendar().getTime()

我从本教程中找到了该代码。从那里,您可以使用SimpleDateFormat将其转换为所需格式的字符串。

但是,如果您使用 JDBC 将日期保存在数据库中,您可能可以使用以下方法Date直接传入:

preparedStatement.setDate(colNum, myDate);
于 2013-05-23T05:50:11.227 回答
9

这是更明确的答案:

从 XMLGregorianCalendar 实例中获取 Date 实例:

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

我发现了Convert XMLGregorianCalendar to Date in Java 中的代码

使用格式“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 的建议进行操作

于 2016-12-19T11:07:30.550 回答
3

如果您想在数据库中插入您的日期,我首先会按照 Daniel 的建议进行操作:

XMLGregorianCalendar xgc=<assume this is initialized>;
Date timestamp=xgc.toGregorianCalendar().getTime();

然后通过 PreparedStatement 将其插入为以毫秒为单位的时间戳(纪元时间)。这样你就不会失去精度。

preparedStatement.setTimestamp(colNum,new Timestamp(timestamp.getTime()));
于 2014-12-03T04:51:38.787 回答
1

tl;博士

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

java.time

现代方法使用 java.time 类取代了麻烦的旧类DateCalendarGregorianCalendar

从遗留类转换为 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() ) ) ;
于 2017-06-21T15:47:30.923 回答
0

在 Java 中使用 DateFormat 类。这应该会有所帮助:http ://docs.oracle.com/javase/6/docs/api/java/text/DateFormat.html

于 2013-05-23T05:51:46.323 回答
0

这将返回 java.util.Date:

java.util.Date tempDate = issueDate.toGregorianCalendar().getTime();
于 2018-03-22T13:35:14.800 回答
0

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

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

要转换为 java.slq.Date 对象,请使用以下代码:-

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

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

于 2017-03-24T11:55:57.383 回答
0

请使用下面的函数 - 只需传递您想要的 XMLGregorianCalendar 实例和日期格式(格式示例:“DD MMMM yyyy”-> 2017 年 1 月 1 日)

public String parseDate(String format,XMLGregorianCalendar XMLdate){
    Date date = XMLdate.toGregorianCalendar().getTime();
    DateFormat  formatter = new SimpleDateFormat(format);
    String formattedDate  = formatter.format(date);
    return formattedDate;
}
于 2017-06-21T15:13:41.137 回答