Подтвердить что ты не робот

Разбор времени unix в С#

Есть ли способ быстро/легко разобрать время Unix в С#? Я совершенно новый на этом языке, поэтому, если это болезненно очевидный вопрос, я прошу прощения. IE У меня есть строка в формате [секунды с эпохи]. [Миллисекунды]. Есть ли эквивалент Java SimpleDateFormat в С#?

4b9b3361

Ответ 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);

Surce: http://www.codeproject.com/KB/cs/timestamp.aspx

Ответ 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));
    }