Есть ли способ быстро/легко разобрать время Unix в С#? Я совершенно новый на этом языке, поэтому, если это болезненно очевидный вопрос, я прошу прощения. IE У меня есть строка в формате [секунды с эпохи]. [Миллисекунды]. Есть ли эквивалент Java SimpleDateFormat в С#?
Разбор времени unix в С#
Ответ 1
Простейший способ, вероятно, использовать что-то вроде:
private static readonly DateTime Epoch = new DateTime(1970, 1, 1, 0, 0, 0,
DateTimeKind.Utc);
...
public static DateTime UnixTimeToDateTime(string text)
{
double seconds = double.Parse(text, CultureInfo.InvariantCulture);
return Epoch.AddSeconds(seconds);
}
Три примечания:
- Если ваши строки определенно имеют форму "x.y", а не "x, y", вы должны использовать инвариантную культуру, как показано выше, чтобы убедиться, что "." анализируется как десятичная точка
- Вы должны указать UTC в конструкторе
DateTime
, чтобы убедиться, что он не считает это местным временем. - Если вы используете .NET 3.5 или выше, вам может потребоваться использовать
DateTimeOffset
вместоDateTime
.
Ответ 2
// This is an example of a UNIX timestamp for the date/time 11-04-2005 09:25.
double timestamp = 1113211532;
// First make a System.DateTime equivalent to the UNIX Epoch.
System.DateTime dateTime = new System.DateTime(1970, 1, 1, 0, 0, 0, 0);
// Add the number of seconds in UNIX timestamp to be converted.
dateTime = dateTime.AddSeconds(timestamp);
// The dateTime now contains the right date/time so to format the string,
// use the standard formatting methods of the DateTime object.
string printDate = dateTime.ToShortDateString() +" "+ dateTime.ToShortTimeString();
// Print the date and time
System.Console.WriteLine(printDate);
Ответ 3
Это очень распространенная вещь, которую люди в С# делают, но для этого нет библиотеки.
Я создал эту мини-библиотеку https://gist.github.com/1095252, чтобы сделать мою жизнь (надеюсь, ваша тоже) проще.
Ответ 4
var date = (new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc))
.AddSeconds(
double.Parse(yourString, CultureInfo.InvariantCulture));
Ответ 5
Hooray для MSDN DateTime docs! Также см. TimeSpan.
// First make a System.DateTime equivalent to the UNIX Epoch.
System.DateTime dateTime = new System.DateTime(1970, 1, 1, 0, 0, 0, 0);
// Add the number of seconds in UNIX timestamp to be converted.
dateTime = dateTime.AddSeconds(numSeconds);
// Then add the number of milliseconds
dateTime = dateTime.Add(TimeSpan.FromMilliseconds(numMilliseconds));
Ответ 6
Это от публикация блога Стефаном Хенке:
private string conv_Timestamp2Date (int Timestamp)
{
// calculate from Unix epoch
System.DateTime dateTime = new System.DateTime(1970, 1, 1, 0, 0, 0, 0);
// add seconds to timestamp
dateTime = dateTime.AddSeconds(Timestamp);
string Date = dateTime.ToShortDateString() +", "+ dateTime.ToShortTimeString();
return Date;
}
Ответ 7
Я понимаю, что это довольно старый вопрос, но я решил, что опубликую свое решение, которое использовал Nodatime Instant class, который имеет метод специально для этого.
Instant.FromSecondsSinceUnixEpoch(longSecondsSinceEpoch).ToDateTimeUtc();
Я полностью понимаю, что, возможно, в Nodatime может быть тяжело для некоторых людей. Для моих проектов, где зависимость раздувания не является серьезной проблемой, я предпочел бы полагаться на поддерживаемые библиотечные решения, а не на необходимость поддерживать свои собственные.
Ответ 8
Здесь он является удобным способом расширения
public static DateTime UnixTime(this string timestamp)
{
var dateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0);
return dateTime.AddSeconds(int.Parse(timestamp));
}