【问题标题】:Convert current date and time into timestamp object (13 digits) [duplicate]将当前日期和时间转换为时间戳对象(13 位)[重复]
【发布时间】:2018-08-21 06:36:40
【问题描述】:

以下是在 C# 中将 java datestamp (13digits) 转换为 date (1520488577604 to 3/12/2018 8:07:02 PM) 的代码。

new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)
    .AddMilliseconds((long)value) // put your value here
    .ToLocalTime().ToString("g");

我需要反转这个功能,需要将3/12/2018 8:07:02 PM转换成1520488577604

【问题讨论】:

  • 你需要在 C# 中,对吗?
  • 是的,在 C# 中我需要这个功能
  • 检查下面的答案。如果您需要更多内容,请告诉我
  • 给我几分钟,我会试试你的答案
  • 这是经典的 UnixTimestamp stackoverflow.com/questions/17632584/…

标签: c#


【解决方案1】:

虽然 Gavin 和 Gaurang 非常接近,但他们错过了一个细节:您想要 1970/01/01 的总 毫秒

namespace MyApp.Extensions
{
    public static class DateTimeExtensions
    {
        public static long MillisecondsTimestamp(this DateTime date)
        {
            DateTime baseDate = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
            return (long)(date.ToUniversalTime()-baseDate).TotalMilliseconds;
        }
    }
}

你可以像这样使用它

using MyApp.Extensions;

// ...
var millisecondsTimestamp = DateTime.Now.MillisecondsTimestamp();

假设您已添加 DateTimeExtensions 所在的命名空间。

【讨论】:

  • 感谢您的关注。
  • @GaurangDave 你到底是什么意思?
  • 使用 TotalMilliseconds。
  • @GaurangDave 啊,明白了。我认为从 cmets 到您的答案已经很清楚了 :)
  • 您在回答中提到了我的名字,然后我看到了 cmets 并弄错了。无论如何谢谢:)
【解决方案2】:

试试这个:

10 位数:

public static long ConvertToTS(DateTime datetime)
{
    DateTime sTime = new DateTime(1970, 1, 1,0,0,0,DateTimeKind.Utc);

    return (long)(datetime - sTime).TotalSeconds;
}

13 位数字:

public static long ConvertToTS(DateTime datetime)
{
    DateTime sTime = new DateTime(1970, 1, 1,0,0,0,DateTimeKind.Utc);

    return (long)(datetime - sTime).TotalMilliseconds;
}

【讨论】:

  • 这个函数的输出是一个10位数字(1520939407),我需要一个13位数字。我这样调用这个函数:ConvertToTS(DateTime.Now) 和存储在 db 中的日期是 2031-01-12 18:18:11.421
  • 为什么要投反对票?你在 2031-01-12 18:18:11.421 收到 1520939407 这个吗?
  • 我没有投反对票,其他人这样做
  • 我投了反对票。正如提问者所说,他需要完整的 13 位数字,你给他 10 位。
  • 反对票促使您改进答案,它达到了目的。我不会等的,谢谢。虽然我确实在更新后删除了它。
【解决方案3】:
Int32 unixTimestamp = (Int32)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;

How to get the unix timestamp in C#

【讨论】:

  • 获取 10 dig 长值,对我来说需要 13 位时间戳
  • 最后 3 位是毫秒,它们真的很重要吗..
  • Int32 unixTimestamp = (Int32)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalMilliseconds;
  • @Gavin,是吗?要求是取 13 位数字,得到一个日期,然后按输入的方式取回 13 位数字。
  • 双 unixTimestamp = (Double)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalMilliseconds;
猜你喜欢
  • 1970-01-01
  • 2018-05-20
  • 2020-06-21
  • 2014-04-11
  • 2012-12-09
  • 1970-01-01
  • 2018-09-12
相关资源
最近更新 更多