【问题标题】:long value to date c#迄今为止的长值c#
【发布时间】:2014-06-07 12:10:23
【问题描述】:

我的服务器正在向我发送以下值 13928550480000,我知道它代表日期 02/19/2014。但我无法弄清楚如何从 long 值中获取日期。

我尝试使用 c# 日期时间类将 long 转换为日期的各种方法,但无法获得正确的日期,即 02/19/2014

        long dateL = 13928550480000;
        DateTime dt = new DateTime(dateL);
        var dtstr = dt.ToString("MM/dd/yyyy");

        var onlyDate = dt.Date;

        DateTime start = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
        DateTime date = start.AddMilliseconds(dateL).ToLocalTime();
        var dtstr1 = date.ToString("MM/dd/yyyy");

【问题讨论】:

  • "我知道代表日期 02/19/2014" 怎么样?换算公式是什么?
  • 它是一个 weblogic 服务器。我有办法验证它,但无法访问公式。
  • 如何验证?代码可以复用吗?
  • @Tawnos 他正在使用答案代码,但它不起作用,所以它不是重复的。

标签: c# datetime


【解决方案1】:

看起来您的源编号代表 自 1970 年 1 月 1 日以来 10 毫秒的增量数(要么是那个,要么是错字):

    long dateL = 13928550480000;

    DateTime start = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
    DateTime date = start.AddMilliseconds(dateL/10).ToLocalTime();
                                         //    ***
                                         //     ^------

    var dtstr1 = date.ToString("MM/dd/yyyy");  // 02/19/2014

我怀疑时区差异与您的问题无关。

【讨论】:

  • 尝试使用 1392855048000。
  • 如果您以 13928550480000(四个零)开头并忘记在所示位置除以 10,您将得到 5/18/2411。
【解决方案2】:

您是否在大数字的末尾写了太多零?也就是说,它真的以 0000 而不仅仅是 000 结尾吗?

如果它真的是 0000,那么它似乎是以 100 微秒的增量(每秒 10,000 个时间增量)来测量时间。但它可能也给了你格林威治标准时间,你期望从中得到当地时间。从 1970 年 1 月 1 日开始的 1392855048 秒时间将是 2014 年 2 月 20 日午夜过后 10 分 48 秒。根据您所在的时区,这可能是当地时间 2 月 19 日的某个时间。

【讨论】:

  • 我认为 D Stanley 答案中的代码与我刚才所说的相同。
猜你喜欢
  • 2017-08-14
  • 1970-01-01
  • 2014-11-16
  • 1970-01-01
  • 1970-01-01
  • 2014-04-13
  • 2014-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多