我以這種格式從 Oracle DB 獲取 TIMESTAMP:yyyy-MM-dd hh:mm:ss.SSS并且想轉換為像dd.MM.yyyy這樣的字串。我執行了字串操作,結果如預期的那樣正確。這種方法對還是錯?還是用作格式化程式更有效?如果 Oracle 將來由于 NLS_LANG 設定不同而回傳不同的字串,我是否必須使用格式化程式?
String date = data.toString().substring(0,10).replace("-","."); // data is received from DB
String day = datum.substring(8,10);
String month = datum.substring(4,8);
String year = datum.substring(0,4);
String myDate = new StringBuilder().append(day).append(month).append(year).toString();
uj5u.com熱心網友回復:
我以這種格式從 Oracle DB 獲取時間戳:yyyy-MM-dd hh:mm:ss.SSS
有了這個陳述句,您已經進入了字串處理的世界。您不想去那里的原因之一是時區。
所以實際上通過您的 JDBC 驅動程式,您應該已經收到了一個ResultSet。可能您使用了 getString() 方法之一并考慮了下一步。
或者,您可以使用 getTimestamp() 甚至 getDate(),這將使進一步的轉換更容易甚至過時。
uj5u.com熱心網友回復:
我不知道 Java,但是 - 從我的 Oracle 角度來看,正確的方法是使用to_char函式:
SQL> create table test as
2 select systimestamp ts from dual;
Table created.
SQL> desc test
Name Null? Type
----------------------------------------- -------- ----------------------------
TS TIMESTAMP(6) WITH TIME ZONE
SQL> select * from test;
TS
---------------------------------------------------------------------------
29.10.21 20:26:17,934000 02:00
這就是我在 Oracle 中的做法:
SQL> select to_char(ts, 'dd.mm.yyyy') result
2 from test;
RESULT
----------
29.10.2021
SQL>
如果您不能從 Java 中使用它,自定義函式可以嗎?它接受時間戳并回傳您想要的格式的字串;然后你會從 Java 呼叫該函式:
SQL> create or replace function f_format_ts (par_ts in timestamp) return char
2 is
3 begin
4 return to_char(par_ts, 'dd.mm.yyyy');
5 end;
6 /
Function created.
SQL> select f_format_ts(a.ts) from test a;
F_FORMAT_TS(A.TS)
--------------------------------------------------------------------------------
29.10.2021
SQL>
uj5u.com熱心網友回復:
時間
ANSI SQL 型別與java.time型別的映射在這篇 Oracle 的文章中描述如下:
| ANSI SQL | Java SE 8 |
|---|---|
| 日期 | 本地日期 |
| 時間 | 當地時間 |
| 時間戳 | 本地日期時間 |
| 時區時間 | 偏移時間 |
| 帶時區的時間戳 | 偏移日期時間 |
下面給出了一個LocalDateTime從 中檢索 a 的示例代碼columnfoo:
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery("SELECT * FROM mytable WHERE <some condition>");
while (rs.next()) {
// Assuming the column index of columnfoo is 1
LocalDateTime ldt = rs.getObject(1, LocalDateTime.class));
System.out.println(ldt);
}
rs.close();
st.close();
如何格式化一個LocalDateTime?
您可以使用DateTimeFormatter格式化一個LocalDateTime.
演示:
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
// This is a dummy LocalDateTime for the purpose of demo. You will retrieve
// LocalDateTime from the DB as shown above
LocalDateTime ldt = LocalDateTime.now();
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd.MM.uuuu", Locale.ENGLISH);
String formatted = ldt.format(dtf);
System.out.println(formatted);
}
}
輸出:
29.10.2021
ONLINE DEMO
從Trail: Date Time 中了解有關現代日期時間 API * 的更多資訊。
* 如果您正在為 Android 專案作業并且您的 Android API 級別仍然不符合 Java-8,請檢查通過 desugaring 可用的 Java 8 API。請注意,Android 8.0 Oreo 已提供對java.time.
uj5u.com熱心網友回復:
您似乎沒有TIMESTAMP從資料庫中獲取值;您正在從資料庫中獲取一個字串值(恰好包含日期/時間資料)。當TIMESTAMP您可以輕松獲取可以輕松格式化的二進制值時,請不要這樣做。
如果您想獲取時間戳,則將其檢索為LocalDateTime:
LocalDateTime datetime = resultSet.getObject(columnIndex, LocalDateTime.class);
您可以將其格式化為您想要使用的任何格式LocalDateTime.format(formatter)。
由于您只想要日期組件,您甚至可以使用LocalDate而不是LocalDateTime.
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/341693.html
上一篇:提取日期設定不正確
