Как разобрать дату и время в секундах
У меня есть строка
1368352924.281610000
представляя DateTime
,
Как я могу разобрать это?
Испытано:
string rststr = Convert.ToString(result);
string[] rststrarr = rststr.Split('.');
DateTime.Parse(rststrarr[0]);
РЕДАКТИРОВАТЬ Извините за путаницу. Это указало, что это была метка времени Unix в высоком разрешении. С уважением.
2 ответа
Вполне вероятно, что это число представляет количество секунд, прошедших с 1 января 1970 года по Гринвичу. Это значение "эпохи Unix", и оно очень распространено во многих системах и форматах дат.
Предполагая, что я правильно указал тип значения, вы можете сделать следующее:
// 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
Тебе нужно 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)