【问题标题】:How to get correct timestamp in C#如何在 C# 中获取正确的时间戳
【发布时间】:2014-01-19 17:03:02
【问题描述】:

我想在我的应用程序中获得有效的时间戳,所以我写道:

public static String GetTimestamp(DateTime value)
{
    return value.ToString("yyyyMMddHHmmssffff");
}
//  ...later on in the code
String timeStamp = GetTimestamp(new DateTime());
Console.WriteLine(timeStamp);

输出:

000101010000000000

我想要类似的东西:

20140112180244

我做错了什么?

【问题讨论】:

    标签: c# timestamp


    【解决方案1】:

    您的错误是使用 new DateTime(),它返回 0001 年 1 月 1 日 00:00:00.000,而不是当前日期和时间。获取当前日期和时间的正确语法是DateTime.Now,因此请更改:

    String timeStamp = GetTimestamp(new DateTime());
    

    到这里:

    String timeStamp = GetTimestamp(DateTime.Now);
    

    【讨论】:

    • 反之亦然?从时间戳到日期时间
    • @DanielV 看这里:Converting a String to DateTime.
    • double timestamp = 1498122000; DateTime fecha = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc).AddSeconds(timestamp); 提取自here
    【解决方案2】:
    var Timestamp = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds();
    

    【讨论】:

    • 需要 NET 4.6。
    • 这是我的答案,但我使用了ToUnixTimeMilliseconds()
    【解决方案3】:
    var timestamp = DateTime.Now.ToFileTime();
    
    //output: 132260149842749745
    

    这是区分不同交易的另一种方法。不是unix时间,而是windows文件时间。

    来自docs

    A Windows file time is a 64-bit value that represents the number of 100- 
    nanosecond intervals that have elapsed since 12:00 midnight, January 1, 1601 
    A.D. (C.E.) Coordinated Universal Time (UTC).
    

    【讨论】:

    • 如果您添加一些解释为什么您的代码答案比其他人更好,这将有所帮助,这样其他用户就会明白为什么要使用您的解决方案来解决这个问题。如果没有解释,只有代码的答案没有多大帮助。
    • 帮助我轻松获得时间戳样式以使缓存无效。 +1
    • 很好的答案!这在我正在努力解决的问题上节省了九个时间。我非常感谢你!
    【解决方案4】:

    对于 UTC

    string unixTimestamp = Convert.ToString((int)DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalSeconds);
    

    对于本地系统

    string unixTimestamp = Convert.ToString((int)DateTime.Now.Subtract(new DateTime(1970, 1, 1)).TotalSeconds);
    

    【讨论】:

      【解决方案5】:
      Int32 unixTimestamp = (Int32)(TIME.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
      

      "TIME" 是您想要获取其 unix 时间戳的 DateTime 对象。

      【讨论】:

        【解决方案6】:
        internal static string UnixToDate(int Timestamp, string ConvertFormat)
        {
            DateTime ConvertedUnixTime = DateTimeOffset.FromUnixTimeSeconds(Timestamp).DateTime;
            return ConvertedUnixTime.ToString(ConvertFormat);
        }
        
        int Timestamp = (int)DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalSeconds;
        

        用法:

        UnixToDate(1607013172, "HH:mm:ss"); // Output 16:32:52
        Timestamp; // Output 1607013172
        

        【讨论】:

          猜你喜欢
          • 2013-03-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-07-10
          • 1970-01-01
          • 2018-07-16
          • 2022-12-12
          • 1970-01-01
          相关资源
          最近更新 更多