如何將字串yyyyMMddHHmmss轉成Datetime呢?

本文介绍了一种将去除分隔符后的日期字符串(如20130402140837)转换为SQL Server中DateTime类型的方法。通过使用CONVERT、DATEADD或STUFF函数,实现了日期字符串的有效解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有朋友在FB上問到,他們將日期的分隔符號都置換成空字串後的字串,要如何將它再轉回成DateTime呢?

例如日期 2013/04/02 14:08:37 會轉成 20130402140837 。 要如何將它再轉回成DateTime呢?

有想到以下的方式,

01DECLARE @DateTimeVaue VARCHAR(30)
02SET @DateTimeVaue = '20130402140837' -- 2013/04/02 14:08:37
03   
04--使用字串函數先將字串轉成日期格式字串再轉成DateTime     (20130402140837 => 20130402 14:08:37)
05SELECT  CONVERT(DATETIME, LEFT(@DateTimeVaue, 8) + ' '
06        + SUBSTRING(@DateTimeVaue, 9, 2) + ':' 
07        + SUBSTRING(@DateTimeVaue, 11, 2) + ':'
08        + RIGHT(@DateTimeVaue, 2), 112)
09  
10--使用DATEADD來將時間加總
11SELECT  DATEADD(s, CAST(RIGHT(@DateTimeVaue, 2) AS INT),
12                DATEADD(n, CAST(SUBSTRING(@DateTimeVaue, 11, 2) AS INT),
13                        DATEADD(hh,
14                                CAST(SUBSTRING(@DateTimeVaue, 9, 2) AS INT),
15                                CONVERT(DATETIME, LEFT(@DateTimeVaue, 8), 112))))

 

網路上查到的做法「how can i convert 'yyyymmddhhmmss' to datetime」,如下,

1-- 使用STUFF先將字串轉成日期格式字串再轉成DateTime   (20130402140837 => 20130402 14:08:37)    
2DECLARE @DateTimeVaue VARCHAR(30)
3SET @DateTimeVaue = '20130402140837' -- 2013/04/02 14:08:37
4SELECT  CONVERT(DATETIME, STUFF(STUFF(STUFF(@DateTimeVaue, 9, 0, ' '), 12, 0, ':'), 15, 0, ':'))

 

不知各位是否有其他的方式呢

转载于:https://www.cnblogs.com/Nina-piaoye/p/3166803.html

<think>好的,我现在需要帮助用户解决如何使用JavaScript将时间字符串换为时间戳的问题。用户之前提到了在XPTL文件中使用Lodash处理时间戳换,现在他们可能希望更基础的方法,或者想了解原生JavaScript的实现方式。 首先,我应该回顾用户提供的引用内容。引用1提到了mktime()函数用于生成指定日期时间的时间戳,但这是否适用于JavaScript呢?可能用户混淆了不同语言的函数,比如PHP的mktime()。需要指出JavaScript中不同的方法。 引用2是关于Java后端字符串到Date和Timestamp的配置,这可能和用户的问题不太直接相关,但可以忽略,因为用户现在关注的是前端JavaScript。 引用3和4讨论了MySQL日期时间与JavaScript之间的换,特别是时区问题。引用4特别提到JavaScript中new Date()会根据本地时区解析时间戳,这可能会影响换结果,需要注意。 引用5提到Python和JavaScript的时间精度差异,但用户现在的问题是关于字符串时间戳,可能需要涉及解析不同格式的时间字符串。 接下来,我需要结合用户之前的对话历史。用户之前的问题是如何在XPTL中使用Lodash设置时间戳换,我的回答涉及注册Vue过滤器和使用Lodash的函数。现在用户可能想了解更底层的JavaScript方法,不依赖框架或库。 用户当前的问题是:“如何使用JavaScript将时间字符串换为时间戳”。需要分步骤讲解,包括基本方法、处理不同格式、时区问题以及常见错误的处理。 首先,基本方法是使用Date.parse()或者new Date().getTime()。但需要注意Date.parse对字符串格式的兼容性,比如ISO 8601格式如"2023-01-15T10:20:30"在不同浏览器的支持情况。非标准格式可能需要手动解析,比如使用split方法分解字符串各部分,然后构造Date对象。 然后,处理不同格式的时间字符串。例如,用户可能有"2023/01/15 10:20:30"或"January 15, 2023 10:20:30"这样的格式,需要调整解析方式。 时区问题非常重要。JavaScript的Date对象默认使用本地时区,但如果在字符串中指定时区(如UTC),需要正确处理。例如,使用toUTCString()或设置时区偏移量。 常见错误包括无效的时间字符串导致返回NaN,或者时区换错误导致时间戳偏差。需要提醒用户验证输入,并注意时区设置。 另外,用户可能关心如何将换后的时间戳用于前端显示或后端传输,可能需要格式化输出,比如换为秒级或毫秒级时间戳,或者使用库如moment.js或date-fns来处理更复杂的情况,但用户的问题可能希望用原生方法。 最后,需要提供示例代码,展示不同情况下的换方法,并强调时区处理的重要性。同时,可能生成相关问题,比如如何处理时区换,或者如何将时间戳字符串格式,以帮助用户进一步学习。</think>在JavaScript中实现时间字符串到时间戳的换,可以通过以下三种方式实现(根据场景选择最佳方案): ### 一、基础换方法 #### 1. Date.parse() 方法 ```javascript // 支持ISO 8601格式(注意时区差异) const timestamp1 = Date.parse("2023-01-15T10:20:30"); // UTC时间 const timestamp2 = Date.parse("2023-01-15T10:20:30+08:00"); // 东八区时间 ``` #### 2. 构造函数+getTime() ```javascript // 更推荐的方式(兼容性更好) const dateObj = new Date("January 15, 2023 10:20:30"); const timestamp = dateObj.getTime(); // 1673738430000 ``` ### 二、特殊格式处理 #### 1. 自定义格式解析(非ISO标准) ```javascript function customParse(dateStr) { const [datePart, timePart] = dateStr.split(' '); const [year, month, day] = datePart.split('-'); const [hours, minutes, seconds] = timePart.split(':'); return new Date(year, month-1, day, hours, minutes, seconds).getTime(); } customParse("2023-01-15 10:20:30"); // 中国时区时间戳 ``` #### 2. 带时区标识的换 ```javascript // 强制指定UTC时间 const utcTimestamp = Date.parse("2023-01-15 10:20:30 UTC"); // 换本地时间到UTC const localToUtc = new Date("2023-01-15 10:20:30").getTime() - new Date().getTimezoneOffset()*60*1000; ``` ### 三、工程化解决方案 #### 1. 带错误处理的封装函数 ```javascript const safeConvert = (str) => { try { const date = new Date(str); return !isNaN(date) ? date.getTime() : null; } catch(e) { console.warn(`Invalid date string: ${str}`); return null; } } ``` #### 2. 时区敏感换(参考引用[4]的时区问题) ```javascript // 强制换为目标时区(示例:东京时间) function toTokyoTime(dateStr) { const localDate = new Date(dateStr); return localDate.getTime() + (9 - localDate.getTimezoneOffset()/60)*60*60*1000; } ``` ### 换效果验证 ```javascript // 验证换结果(中国标准时间CST) const testDate = new Date(1673738430000); console.log(testDate.toLocaleString('zh-CN')); // 输出:2023/1/15 10:20:30 ``` ### 关键差异对比表 | 方法 | 精确度 | 时区处理 | 格式限制 | |--------------------|--------|-----------------------|--------------| | Date.parse() | 毫秒级 | 依赖字符串时区标识 | 需ISO格式 | | new Date().getTime()| 毫秒级 | 使用浏览器时区 | 支持多种格式 | | 自定义解析 | 秒级 | 可手动控制时区 | 需要格式匹配 | ### 常见问题解决 1. **格式兼容性问题**: ```javascript // 统一格式换函数 const normalizeDate = (str) => str.replace(/(\d{4})\/(\d{2})\/(\d{2})/, "$1-$2-$3"); ``` 2. **秒级与毫秒级换**: ```javascript // 前端向后端传输时换 const apiTimestamp = Math.floor(new Date().getTime() / 1000); // 参考引用[5] ``` 3. **MySQL时间换**(参考引用[3]): ```javascript // 换MySQL datetime格式(UTC时间) const mysqlTimestamp = Date.parse("2023-01-15 10:20:30 UTC"); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值