我试图从ISO格式的一个表中提取日期,然后以美国日期格式存储它?
Trunc(cast(to_timestamp(ATTRIBUTE_39,'yyyy-mm-dd"T"hh24:mi:ss.ff3"Z"')as date))
实际输出:
4/11/2018 12:00:00 AM
预期产出:
4/11/2018
答案 0 :(得分:2)
我试图从ISO格式的一个表中提取日期,然后以美国日期格式存储它?
日期(和时间戳)没有格式 - 日期为in a table by 7 bytes,时间戳为20字节。
您可以使用DATE
以及TO_TIMESTAMP_TZ
或TZR
格式模型获取TZH:THM
数据类型的值,以匹配时区区域/偏移量(它们将两者都适用于Z
ulu时区区域)
SELECT CAST(
TO_TIMESTAMP_TZ(
ATTRIBUTE_39,
'yyyy-mm-dd"T"hh24:mi:ss.ff3TZH:TZM'
) AT TIME ZONE 'UTC' -- Convert to a common time zone
AS DATE
)
FROM your_table;
当您从表中选择时,您正在使用的任何客户端程序(通常)将隐式地将其内部使用的7字节转换为您(用户)可以读取的字符串。 SQL / Plus和SQL Developer在执行此隐式转换时使用NLS_DATE_FORMAT
会话参数作为格式模型。
因此您的查询有效地转换为:
SELECT TO_CHAR(
CAST(
TO_TIMESTAMP_TZ(
ATTRIBUTE_39,
'yyyy-mm-dd"T"hh24:mi:ss.ff3TZR'
) AT TIME ZONE 'UTC'
AS DATE
),
(
SELECT VALUE
FROM NLS_SESSION_PARAMETERS
WHERE PARAMETER = 'NLS_DATE_FORMAT'
)
)
FROM your_table;
如果要格式化日期或时间戳,则必须使用TO_CHAR()
将其显式转换为字符串:
SELECT TO_CHAR(
CAST(
TO_TIMESTAMP_TZ(
ATTRIBUTE_39,
'yyyy-mm-dd"T"hh24:mi:ss.ff3TZR'
) AT TIME ZONE 'UTC'
AS DATE
),
'MM/DD/YYYY'
)
FROM your_table;
或者通过更改NLS_DATE_FORMAT
会话参数:
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';
(请注意,这只会更改当前会话中的格式,并且不会为任何其他会话/用户更改格式。)
答案 1 :(得分:0)
试试这个:
Call<List<ResponseData>> call = api.getData();
call.enqueue(new Callback<List<ResponseData>>() {
@Override
public void onResponse(Call<List<ResponseData>> call, Response<List<ResponseData>> response) {
if (response.isSuccessful() && response.body().isSuccessful()){
ResponseData data=response.body();
//Log.d("Message:",data.getErrorMessage);
}
}
@Override
public void onFailure(Call<List<Hero>> call, Throwable t) {
Toast.makeText(getApplicationContext(), t.getMessage(), Toast.LENGTH_SHORT).show();
}
});
默认日期/时间格式取决于您的NLS_DATE_FORMAT设置。