我有一个字符串
1368352924.281610000
呈现DateTime
.
我该如何解析这个?
试过了:
string rststr = Convert.ToString(result);
string[] rststrarr = rststr.Split('.');
DateTime.Parse(rststrarr[0]);
编辑 对不起,令人困惑。它指出这是一个高分辨率的unix时间戳。亲切的问候。
我有一个字符串
1368352924.281610000
呈现DateTime
.
我该如何解析这个?
试过了:
string rststr = Convert.ToString(result);
string[] rststrarr = rststr.Split('.');
DateTime.Parse(rststrarr[0]);
编辑 对不起,令人困惑。它指出这是一个高分辨率的unix时间戳。亲切的问候。
您需要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)
这个数字很可能代表自 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