Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

`Java.lang.String` को `oracle.sql.TIMESTAMPTZ` में बदलें

आपके टाइमस्टैम्प मानक जावा पार्स करने योग्य प्रारूपों में नहीं हैं। इसलिए उन्हें पार्स करने के लिए आपको ऐसे प्रारूपों को संभालने के लिए कस्टम कोड लिखना होगा।

उपरोक्त बिंदुओं को ध्यान में रखते हुए, निम्नलिखित कोड आपके लिए आवश्यक कार्य करेगा।

    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());

उपरोक्त कोड निम्नलिखित उपयोगिता विधियों का उपयोग करता है

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, ":");
}

यह कोड विशेष रूप से आपके टाइमस्टैम्प उदाहरणों को पूरा करने के लिए लिखा गया है, किसी भी विचलन को इसके द्वारा नियंत्रित नहीं किया जा सकता है और इसे और अधिक अनुकूलन की आवश्यकता होगी।

आशा है कि यह आपकी मदद करेगा।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. व्यक्तिगत कॉलम स्वरूपण के बिना, कॉलम नामों के sqlplus छंटनी को रोकना

  2. ऑरैकल में अस्थायी टेबलस्पेस को कैसे कम करें?

  3. Oracle - किसी उपयोगकर्ता को किसी अन्य उपयोगकर्ता की वस्तुओं के अधिकार कैसे प्रदान करें

  4. ऑरैकल फ़ंक्शन से बूलियन मान लौटाएं

  5. ऑरैकल ऐप्स r12 . में ट्रेस कैसे इनेबल करें