【问题标题】:How do I convert microseconds into a timestamp?如何将微秒转换为时间戳?
【发布时间】:2011-04-14 05:58:40
【问题描述】:

我从一个未加密的 .DAT 文件中获取了这个片段:

代码:

00 e1 27 17 6f e6 69 c0

转换为十进制的 63,374,851,375,000,000。数字的单​​位是微秒。

而且这个庞大的数字无法绕过 1970 年 1 月 1 日 00:00:00 格式;当今大多数转换器都使用这种格式。

所以,是的。是否有这样的转换器使用 1 年 1 月 1 日格式?或者我该怎么做?

顺便说一句,时间戳是日期和时间。

提前致谢!

【问题讨论】:

标签: date time converter


【解决方案1】:

您没有说您使用的是什么语言,如果它是 .NET 语言,您可以使用:http://msdn.microsoft.com/en-us/library/z2xf7zzk.aspx 对于该构造函数,输入以纳秒为单位(您确定您的数字是毫秒而不是纳秒?)。

如果您确定它以毫秒为单位,则转换为纳秒应该很容易:1 毫秒 = 1 000 000 纳秒。

但我感觉那是纳秒而不是毫秒......

现在您已经告诉我们它是 微秒

从十进制到 yyyy dd MM hh:mm:ss 的 C# 示例

long microseconds = 63370738175000000; long ticks = microseconds * 10; DateTime timestamp = new DateTime(ticks); Console.WriteLine(timestamp.ToString("yyyy dd MM hh:mm:ss"));

打印出来:

2009 年 20 月 2 日 02:49:35

从 yyyy dd MM hh:mm:ss 转为十进制

String dateString = "2009 20 02 02:49:35"; DateTime timestamp = DateTime.ParseExact(dateString, "yyyy dd MM hh:mm:ss",CultureInfo.CurrentCulture); long ticks = timestamp.Ticks; long microseconds = ticks / 10; Console.WriteLine(microseconds);

打印出来:

63370694975000000

如果你想用十六进制写:

Console.WriteLine(microseconds.ToString("X"));

然后它会打印:

E1234FB3278DC0

如果您想要其他编程语言的答案,请将其添加到您的问题中。

【讨论】:

  • 另外,请确保您知道作为起点的“零日期”。
  • 其实是微秒,不是毫秒。我的错!
  • 呃……我的错,这是我的错,伙计们。不是毫秒,是微秒。好的,我将添加更多时间戳:00 E1 23 59 C2 13 3D C0 输出:20/2/2009 14:49 十进制:63370738175000000 我尝试了一个使用 64 位整数的转换器工具(从微秒到年),并且得到了正确的结果,即 2009 年。但是,我找不到任何可以执行相同操作但从微秒到时间戳 (YYYY MM DD XX:XX:XX) 的转换器。
  • 好吧,那么:1 微秒 = 1000 纳秒。所以你仍然可以使用.Net DateTime(再次:你对什么语言/平台感兴趣?)你所要做的就是将你的输入参数乘以 1000。
  • 我现在看到 .NET Ticks 是 100 纳秒 (msdn.microsoft.com/en-us/library/system.datetime.ticks.aspx),这意味着单个滴答表示一百纳秒或百万分之一秒。一毫秒内有 10,000 个滴答声。 1 个滴答等于 10 微秒。因此,只需将 63370738175000000 乘以 10,并将其作为参数传递即可获得正确的转换。
【解决方案2】:

在JAVA中为了将微秒转换成java.sql.Timestamp

public static Timestamp getTimestampFromMicros(long pMicros) {
  long millis = TimeUnit.MICROSECONDS.toMillis(pMicros);
  long shaaritInMicros = pMicros - TimeUnit.MILLISECONDS.toMicros(millis);
  Timestamp ts = new Timestamp(millis);
  long nanos = ts.getNanos() + TimeUnit.MICROSECONDS.toNanos(shaaritInMicros);
  ts.setNanos((int)nanos);
  return ts;
}

【讨论】:

    【解决方案3】:

    使用下面的 Java 代码将微秒转换为日期和时间,

       long msec = microseconds * 1/1000;
       DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
       dateFormat.format(msec);
    

    哪个会返回, 2016-01-27 03:41:12

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-17
      • 1970-01-01
      • 2014-11-27
      • 2020-10-20
      • 2021-03-15
      • 2016-03-04
      • 2016-03-04
      相关资源
      最近更新 更多