将 NTP 字符串转换为日期时间

Posted

技术标签:

【中文标题】将 NTP 字符串转换为日期时间【英文标题】:Covert NTP string to DateTime 【发布时间】:2015-08-27 11:15:19 【问题描述】:

我写了一个函数来将 NTP 中的日期/时间字符串转换为 sql dataTime 格式。它运行良好。

用法:

SELECT dbo.udf_ntp_converter('21:21:54.715 Greece Mon Aug 24 2015') 返回

2015-08-24 21:21:54

但是我的问题是,有时字符串的开头带有一个点或星号,如下例所示:

*21:21:54.715 希腊 2015 年 8 月 21 日星期一

.21:21:54.715 希腊 2015 年 8 月 21 日星期一

我不想使用 REPLACE,因为它可能会省略毫秒分隔符。 我该如何修改我当前的功能来解决这个问题?

这是我目前的功能:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[udf_ntp_converter] (@TimeStamp varchar (45))

    RETURNS varchar(20)

AS

    BEGIN

        DECLARE @result varchar(20);

        SELECT @TimeStamp = REPLACE(@TimeStamp,'*','')

        SELECT @result = CONVERT(VARCHAR(19), (CONVERT(datetime,RIGHT(@TimeStamp, 11))+CONVERT(datetime,LEFT(@TimeStamp,12))), 120)

        RETURN @result

    END

【问题讨论】:

【参考方案1】:

在开头添加一点*.

ALTER FUNCTION [dbo].[udf_ntp_converter] (@TimeStamp varchar (45))

    RETURNS varchar(20)

AS
BEGIN
        DECLARE @result varchar(20);


 IF (LEFT(@TimeStamp ,1) IN ('*','.'))
     BEGIN
           SELECT @TimeStamp = RIGHT(@TimeStamp , LEN(@TimeStamp) - 1)
     END

  SELECT @result = CONVERT(VARCHAR(19), (CONVERT(datetime,RIGHT(@TimeStamp, 11))
                                             +CONVERT(datetime,LEFT(@TimeStamp,12))), 120)

        RETURN @result

END

【讨论】:

修复了它。在我所有的尝试中,我从未在 if 语句中使用过 BEGIN 和 END。

以上是关于将 NTP 字符串转换为日期时间的主要内容,如果未能解决你的问题,请参考以下文章

将日期字符串转换为 mysql 日期时间字段

将 UTC 日期时间字符串转换为本地日期时间

无法将字符串转换为日期和日期转换为字符串 Swift 5.2

将日期时间转换为字符串 PHP

将字符串日期时间转换为熊猫日期时间

Python将日期时间字符串转换为日期