Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Chuyển đổi `Java.lang.String` THÀNH` oracle.sql.TIMESTAMPTZ`

Dấu thời gian của bạn không ở định dạng có thể phân tích cú pháp java tiêu chuẩn. Vì vậy, để phân tích cú pháp, bạn cần viết mã tùy chỉnh để xử lý các định dạng như vậy.

Hãy ghi nhớ những điểm trên, mã sau đây sẽ giúp ích cho bạn.

    SimpleDateFormat dateFormatTZGeneral = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS z");
    SimpleDateFormat dateFormatTZISO = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS XXX");
    SimpleDateFormat dateFormatWithoutTZ = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");


    String[][] zoneStrings = DateFormatSymbols.getInstance().getZoneStrings();

    Date date = null;

    String[] timeStampSplits = timestamp.split(" ");
    if(timeStampSplits.length>2) {

        String timezone = timeStampSplits[2];
        //First Case Asia/Calcutta
        if(Character.isAlphabetic(timezone.charAt(timezone.length()-1))) {

            for(String[] zoneString: zoneStrings) {
                if(zoneString[0].equalsIgnoreCase(timezone)) {
                    timeStampSplits[2] = zoneString[2];
                    break;
                }
            }

            timestamp = createString(timeStampSplits," ");
            date = getDate(timestamp, dateFormatTZGeneral);
        } else {
            //Second Case 8:00
            timeStampSplits[2] = formatTimeZone(timeStampSplits[2]);

            timestamp = createString(timeStampSplits," ");
            date = getDate(timestamp, dateFormatTZISO);
        }

    } else {
        // Third Case without timezone
        date = getDate(timestamp, dateFormatWithoutTZ);
    }

    System.out.println(date);

    TIMESTAMPTZ oraTimeStamp = new TIMESTAMPTZ(<connection object>,new java.sql.Timestamp(date.getTime());

Đoạn mã trên sử dụng các phương thức tiện ích sau

private static Date getDate(String timestamp, SimpleDateFormat dateFormat) {
    Date date = null;
    try {
        date = dateFormat.parse(timestamp);
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return date;
}

private static String createString(String[] contents, String separator) {
    StringBuilder builder = new StringBuilder();
    for (String content : contents) {
        builder.append(content).append(separator);
    }
    builder.deleteCharAt(builder.length()-separator.length());

    return builder.toString();
}

private static String formatTimeZone(String timeZone) {
    String[] timeZoneSplits = timeZone.split(":");
    DecimalFormat formatter = new DecimalFormat("+##;-#");
    formatter.setMinimumIntegerDigits(2);

    timeZoneSplits[0] = formatter.format(Integer.parseInt(timeZoneSplits[0]));
    return createString(timeZoneSplits, ":");
}

Mã này được viết riêng để phục vụ cho các ví dụ về dấu thời gian của bạn, bất kỳ sai lệch nào có thể không được xử lý bằng mã này và nó sẽ cần nhiều tùy chỉnh hơn.

Hy vọng điều này sẽ giúp bạn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle - Materialized View thay đổi cấu trúc quá chậm

  2. Các công cụ để tạo một sơ đồ cơ sở dữ liệu / sơ đồ ER từ cơ sở dữ liệu Oracle hiện có?

  3. Cách xuất kết quả truy vấn sang tệp CSV trong SQLcl (Oracle)

  4. Làm thế nào để sử dụng Oracle ORDER BY và ROWNUM một cách chính xác?

  5. khoảng thời gian chờ đã trôi qua. tất cả các kết nối gộp đã được sử dụng và đã đạt đến kích thước nhóm tối đa