将整数字段日期时间转换为日期时间

Convert Integer field Date time to Date Time

我在 SQL Server 2012 中工作。数据集中的日期时间列如下所示:1512543210。该列是整数。我想将其转换为 dd-mm-yyyy hh:mm:ss 之类的内容,例如01-01-2019 12:12:12。但我不能这样做。我正在使用以下代码:

select dateadd(SS, 1512543210, '01/01/1970 00:00:00') as datetime
from sampledb

执行查询后我得到了这个。

2017-12-06 00:00:00.0

但我想要这种格式;

06-12-2017 00:00:00

您可以使用 CONVERT 选项

select CONVERT(varchar,dateadd(SS,DateTime,'01/01/1970 00:00:00') ,21) as datetime from sampledb

您可以使用 DATEADD 将 UNIX 时间戳转换为 DATETIME,将 FORMAT 函数转换为 format it:

SELECT FORMAT(DATEADD(SECOND, 1512543210, '19700101'), 'dd-MM-yyyy hh:mm:ss')
-- 06-12-2017 06:53:30

话虽如此,Java 具有用于格式化日期的 DateTimeFormatter class。时间戳可以直接用来构造日期对象。

您可以按照评论和至少一个其他答案中所述在数据库查询中转换它,但您也可以在 Java 中进行转换:

看看这个例子:

public static void main(String args[]) {
    // take the moment represented by the int from the database
    Instant instant = Instant.ofEpochSecond(1512543210);
    // create a datetime object (modern java api)
    LocalDateTime ldt = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
    // create a formatter for the pattern of your choice
    DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss");
    // then print the datetime using the desired format
    System.out.println(ldt.format(dtf));
}

这输出

06-12-2017 07:53:30

在我的 IDE 中,请检查你的代码。

Please note that you don't need to do the DATEADD operation in SQL for this, just fetch the int value from the database by something like resultSet.getInt(...) and pass it to the Instant.ofEpochSeconds(...), it will calculate the time based on "1970-01-01 00:00:00".

试试这个..

select FORMAT(dateadd(SS,1512543210,'01/01/1970 00:00:00'), N'MM-dd-yyyy hh:mm:ss')

如果您使用的是旧版本的 SQL 服务器,则 format 功能不可用。另一种方法是使用 convert 样式 105 (意大利语)来获取 MM-dd-yyyy 部分。然后就可以取120(odbc canonical)样式的最后一部分得到hh:mm:ss部分:

select convert(varchar(30), dateadd(second, 1512543210, '1970-01-01'), 105) + ' ' + 
       substring(convert(varchar(30), dateadd(second, 1512543210, '1970-01-01'), 20), 12, 8)
-->
06-12-2017 06:53:30

Example at rextester.