时间戳转带有格式的时间

网上找了几个都转换的不太准确还是这个笨办法好用点  忘记了具体转载那个大佬

var dateTime= new Date(time);//time为时间戳
var date= changedate(dateTime);//dateTime是Thu Aug 01 2019 13:36:57 GMT+0800 (中国标准时间)   返回结果 date 为    2019-8-1 13:36:57
/*
传入时间  Thu Aug 01 2019 13:36:57 GMT+0800 (中国标准时间)  转换为  2019-8-1 13:36:57
时间转换
*/
function changedate(d) {
    var datetime=d.getFullYear() + '-' + (d.getMonth() + 1) + '-' + d.getDate() + ' ' + d.getHours() + ':' + d.getMinutes() + ':' + d.getSeconds();
    return datetime
}

转载于:https://my.oschina.net/u/3774949/blog/3082180

<think>嗯,用户问的是Oracle时间戳时间格式的问题。首先,我得确认用户指的是哪种时间戳类型。Oracle里有DATE和TIMESTAMP两种类型,TIMESTAMP精度更高,包含小数秒。用户可能需要将TIMESTAMP换为特定格式的字符串,或者换为DATE类型。 接下来,我得考虑常用的换方法。通常用TO_CHAR函数来处理格式换,比如TO_CHAR(timestamp_column, 'YYYY-MM-DD HH24:MI:SS.FF')。需要提醒用户注意格式模型,比如HH24是24小时制,FF表示小数秒。不同版本的Oracle可能支持的格式略有不同,特别是小数秒部分,FF1到FF9的区别。 另外,用户可能需要将TIMESTAMP成DATE,这时候可以用CAST函数,但要注意这样会丢失小数秒的信息。这部分需要特别说明,避免用户换后数据丢失。 还有时区的问题,如果时间戳带有时区信息,比如TIMESTAMP WITH TIME ZONE,换时可能需要处理时区换,比如用FROM_TZ或者AT TIME ZONE子句。这时候用户可能需要调整时区显示,需要举例说明。 还要考虑用户可能的错误,比如格式字符串写错了,或者混淆了DATE和TIMESTAMP的区别。需要提醒常见的注意事项,比如格式模型的大小写,不同元素的意义,以及截断小数秒的情况。 可能用户的实际应用场景是什么?比如在查询结果中显示更易读的时间,或者在报表中格式时间戳。需要给出不同情况的示例,比如只取日期部分,或者包括毫秒。另外,用户可能需要将字符串时间戳,这时候用TO_TIMESTAMP函数,但格式模型必须匹配。 总结一下,回答的结构应该是先介绍TO_CHAR的基本用法,然后处理时区的情况,再提到类型换CAST,最后给出注意事项和常见问题。示例要覆盖不同情况,确保用户能根据需求调整格式模型。</think>在Oracle数据库中,将时间戳(TIMESTAMP类型)换为特定时间格式的字符串,可以使用 `TO_CHAR` 函数。以下是详细说明和示例: --- ### **1. 基本换语法** ```sql TO_CHAR(timestamp_column, 'format_model') ``` - `timestamp_column`:时间戳类型的列或值 - `format_model`:目标时间格式模型 --- ### **2. 常用格式模型** | 格式元素 | 说明 | 示例 | |----------|--------------------------|-----------------| | `YYYY` | 4位年份 | 2023 | | `MM` | 月份(01-12) | 07 | | `DD` | 日(01-31) | 15 | | `HH24` | 24小时制的小时(00-23) | 14 | | `MI` | 分钟(00-59) | 30 | | `SS` | 秒(00-59) | 45 | | `FF` | 小数秒(默认6位) | 123456 | | `FF3` | 3位小数秒 | 123 | | `DY` | 星期缩写(如MON, TUE) | MON | | `AM`/`PM`| 上午/下午标识 | PM | --- ### **3. 示例** #### (1) 换为标准日期时间格式 ```sql SELECT TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD HH24:MI:SS.FF') AS formatted_time FROM DUAL; ``` 输出示例:`2023-07-15 14:30:45.123456` #### (2) 仅保留日期部分 ```sql SELECT TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD') AS formatted_date FROM DUAL; ``` 输出示例:`2023-07-15` #### (3) 包含毫秒和星期 ```sql SELECT TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD HH24:MI:SS.FF3 DY') AS formatted_time FROM DUAL; ``` 输出示例:`2023-07-15 14:30:45.123 MON` --- ### **4. 处理时区** 如果时间戳包含时区(如 `TIMESTAMP WITH TIME ZONE`),需指定时区换: ```sql SELECT TO_CHAR( FROM_TZ(SYSTIMESTAMP, 'UTC') AT TIME ZONE 'Asia/Shanghai', 'YYYY-MM-DD HH24:MI:SS.FF TZR' ) AS beijing_time FROM DUAL; ``` 输出示例:`2023-07-15 22:30:45.123456 ASIA/SHANGHAI` --- ### **5. 将时间戳为DATE类型** ```sql SELECT CAST(SYSTIMESTAMP AS DATE) AS converted_date FROM DUAL; ``` 此操作会**丢失小数秒和时区信息**。 --- ### **6. 注意事项** 1. **格式模型区分大小写**:`HH24`(24小时制)与 `HH12`(12小时制)不同。 2. **小数秒位数**:`FF`默认显示6位,可通过`FF1`-`FF9`指定位数(如`FF3`显示3位)。 3. **时区换**:若涉及跨时区,需使用`FROM_TZ`或`AT TIME ZONE`子句。 4. **性能**:频繁换可能影响查询效率,建议在应用层处理格式化。 --- ### **7. 反向操作(字符串时间戳)** 若需要将格式化字符串时间戳,使用 `TO_TIMESTAMP`: ```sql SELECT TO_TIMESTAMP('2023-07-15 14:30:45.123', 'YYYY-MM-DD HH24:MI:SS.FF3') FROM DUAL; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值