Как разобрать дату и время в секундах

У меня есть строка

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)

Другие вопросы по тегам