将JAVA日期更改为(dd-MMM-yy)的ORACLE日期格式

时间:2018-09-05 15:40:47

标签: java

我具有以下格式的日期:

(java.util.Date)IST 2018年9月5日12:30:00

我需要将此日期转换为dd-MMM-yy。

我使用了以下代码:

public static String converToSqlDate(Date date) {
        String strDate = null;
        java.text.SimpleDateFormat sdf = new SimpleDateFormat(WSRDConstants.SQL_FORMAT); //dd-MMM-yy
        if (date != null) {
            strDate = sdf.format(date);
        } else {
            return null;
        }
        return strDate;
    }

但是,当我尝试将日期保留在DB中时,它没有这样做并将其保存为null参数。 我正在使用JDBC将数据持久存储到数据库中。

1 个答案:

答案 0 :(得分:1)

tl; dr

使用对象而不是文本将日期值保留到数据库中。

将过时的Date转换为现代的Instant。使用JDBC 4.2发送到数据库。

myPreparedStmt.setObject( 
    … , 
    myJavaUtilDate         // Avoid the terrible legacy date-time classes. Use only java.time classes. 
    .toInstant()           // Convert from legacy class to modern. Both represent a moment in UTC. 
    .atZone(               // Adjust from UTC to the wall-clock time used by the people of a particular region, a time zone. 
        ZoneId.of( "Africa/Tunis" )
    )                      // Returns a `ZonedDateTime` object. 
    .toLocalDate()         // Extract only the date, without time-of-day and without time zone. Returns a `LocalDate` object. 
) ;

智能对象,而不是哑字符串

使用日期时间值时,请使用日期时间类型,而不要使用String

从JDBC 4.2开始,我们可以与数据库交换 java.time 对象。无需使用可怕的旧式旧类,例如java.sql.Datejava.sql.Timestamp以及java.util.Date

如果您有java.util.Date对象,请立即转换为现代替换对象java.time.Instant。要进行转换,请在旧类上调用新方法。

Instant instant = myJavaUtilDate.toInstant() ; 

旧类和Instant都代表UTC的时刻。要确定该日期的日期或一天中的某个时间,我们必须调整到所需的/预期的时区。在任何给定的时刻,日期和时间在全球范围内都会有所不同。

ZoneId z = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = instant.atZone( z ) ;

仅提取日期。

LocalDate ld = zdt.toLocalDate() ;

发送到数据库。

myPreparedStmt.setObject( … , ld ) ;

检索:

LocalDate ld = myResultSet.getObject( … , LocalDate.class ) ;

关于 java.time

java.time框架已内置在Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendarSimpleDateFormat

目前位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解更多信息,请参见Oracle Tutorial。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310

您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*类。

在哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展了java.time。该项目为将来可能在java.time中添加内容提供了一个试验场。您可能会在这里找到一些有用的类,例如IntervalYearWeekYearQuartermore