Как преобразовать unix в datetime C#?

Добрый день, я хочу сделать график с данными, но время у меня стоит в unix, когда я его переобразовываю выдается ошибка. Вот мой код:

// Пример: 44443.8340277778 это дни от 1900 года, я от них отнимаю 70 лет и в секунды
string[] lines = File.ReadAllLines(directory + @"\newData.dat");

for (int j = 0; j < lines.Length - 1; j += 4)
{
    try
    {
        long unix = (long)TimeSpan.FromDays(long.Parse(lines[j]) - 2550).TotalSeconds;

        DateTimeOffset dateTimeOffset = DateTimeOffset.FromUnixTimeSeconds(unix);
        DateTime utc = dateTimeOffset.UtcDateTime;

        dates.Add(utc.ToString("yyyy-MM-dd-HH-mm"));
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

chart1.AxisX.Clear();
chart1.AxisX.Add(new Axis()
{
    Title = "Время",
    Labels = dates
});


Ошибка:
61f7ceef405b2559685322.png
  • Вопрос задан
  • 279 просмотров
Решения вопроса 1
@Voland69
Parse у вас в блоке один, и ошибка судя-по всему именно в нем.
Если пример верен, то вижу две ошибки:
  1. long не сможет распарсить вещественное число
  2. если взять double при дефолтной российской локали тоже не сможет - т.к. десятичный разделитель не тот

P.S. метод расчета сомнителен - что за 2550 в днях? Если 70 лет то это 25550 дней без учета високосных годов (70*365).

P.P.S. DateTime умеет хранить от 1 января 0001 года, его AddDays принимает Double, думаю что Ваш алгоритм можно упростить и вообще избавиться от unix time секунд.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы