2

我有一个字符串

1368352924.281610000

呈现DateTime.

我该如何解析这个?

试过了:

string rststr = Convert.ToString(result);                       
string[] rststrarr = rststr.Split('.');
DateTime.Parse(rststrarr[0]);

编辑 对不起,令人困惑。它指出这是一个高分辨率的unix时间戳。亲切的问候。

4

2 回答 2

3

您需要TimeSpan.FromMilliseconds, 然后将其添加到您的毫秒值所指的参考时间。

例如(编辑 2:假设您的参考日期是 DateTime.MinValue)

double d = double.Parse("1368352924.281610000");
TimeSpan ts = TimeSpan.FromMilliseconds(d);
DateTime dt = DateTime.MinValue.Add(ts);

编辑正如 Wouter Huysentruit 指出的那样,有很多方法可以剥皮。您应该选择一个强调您的场景意图的选项,例如:

DateTime dt = DateTime.MinValue.Add(ts);
dt = DateTime.MinValue + ts;
dt = dateTime.MinValue.AddMilliseconds(d);
dt = DateTime.FromOADate(d);

(对于后一种,请参阅FromOADate

于 2013-05-13T12:04:12.730 回答
3

这个数字很可能代表自 1970 年 1 月 1 日 UTC 以来经过的秒数。这是“Unix Epoch”值,在许多系统和日期格式中很常见。

假设我对您拥有的价值类型是正确的,那么您可以执行以下操作:

// you said you were starting with a string
string s = "1368352924.281610000";

// but you are going to need it as a double.
// (If it's already a double, skip these two steps)
var d = double.Parse(s);

// starting at the unix epoch
DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);

// simply add the number of seconds that you have
DateTime dt = epoch.AddSeconds(d);


Debug.WriteLine("{0} {1}", dt, dt.Kind);  // prints  05/12/2013 10:02:04 Utc
于 2013-05-13T20:59:54.850 回答