【问题标题】:Convert DateTime to Int将日期时间转换为 Int
【发布时间】:2013-07-25 01:53:32
【问题描述】:

这是我在 SQL Server 中做的示例

SELECT CAST(CAST('2012-01-25 10:00:00.000' AS DATETIME) AS INT) + 2

结果是 40933

如何使用 c# 实现这一点?这个整数是从哪里来的,又是怎么来的?

参考:Convert from DateTime to INT 但这是我在 c# 中所需要的

【问题讨论】:

  • 为什么要用C#来做?
  • 因为我正在开发使用服务的应用程序,我不能在那里使用 sql 过程

标签: c# sql sql-server datetime int


【解决方案1】:

我不明白为什么您需要在 C# 中将 DateTime 表示为整数,但您可以使用此方法:

public static int DateTimeToInt(DateTime theDate)
{
    return (int)(theDate.Date - new DateTime(1900, 1, 1)).TotalDays + 2;
}

你可以使用这个方法进行反向操作:

public static DateTime IntToDateTime(int intDate)
{
    return new DateTime(1900, 1, 1).AddDays(intDate - 2);
}

【讨论】:

  • 非常感谢,我需要这个,因为数据库中有一个字段将 DateTime 表示为这个整数,我想这是为了优化....我正在开发窗口商店应用程序,它是现有的应用程序......并且唯一的通信方式是虽然 DB 是服务所以,我需要在我的 PCL 中进行所有操作
  • @Arun: bad habits to kick : mis-handling date / range queries - 你应该将日期存储为字符串或整数 - 你只是在自找麻烦。使用DATEDATETIME 数据类型!
  • @Klaus 你能说说为什么这个+/- 2 吗?
  • @marc_s - 有 DateTime 字段但是,这个整数值有单独的字段来优化查询....无论如何我无法访问 db,因为我在另一端....谢谢关注:)
  • @Rezoan +/- 2 取自 OP 的示例
【解决方案2】:

将 dateTime 转换为时间戳的扩展

public static int DateTimeToInt(this DateTime theDate)
{
    int unixTime = (int)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds;
    return unixTime;
}

最好将 dateTime 转换为 long,为此使用属性 DateTime.Ticks

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-29
    • 1970-01-01
    • 2012-04-30
    • 2019-03-07
    • 1970-01-01
    • 2021-04-07
    • 2020-11-06
    相关资源
    最近更新 更多