我有一个字符串
1368352924.281610000
展示DateTime
。
我该如何解析这个?
尝试过:
string rststr = Convert.ToString(result);
string[] rststrarr = rststr.Split('.');
DateTime.Parse(rststrarr[0]);
修改 抱歉让人困惑。它指出,这是一个高分辨率的unix时间戳。 亲切的问候。
答案 0 :(得分:3)
您需要TimeSpan.FromMilliseconds
,然后将其添加到您的毫秒值所指的参考时间。
e.g。 (编辑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)
答案 1 :(得分: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