Отрицательное время создания файла

Buddha

Client
Регистрация
10.03.2019
Сообщения
121
Благодарностей
18
Баллы
18
Приветствую, коллеги.
Требуется на основании времени создания файла произвести определенные действия. Я воспользовался кодом из похожих тем на форуме, но получил странные результаты. Файл свежесозданный.

Беру время создания файла
C#:
var time = new System.IO.FileInfo(project.Variables["profile_path"].Value).CreationTime;
return time;
Конвертирую в UNIX
C#:
string format = "dd.MM.yyyy HH:mm:ss";
DateTime startdate =   DateTime.ParseExact(project.Variables["profile_time"].Value,
          format, CultureInfo.InvariantCulture);         
int he = (Int32)(startdate.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
return Convert.ToString(he);
Получаю минус пару часов. У старых файлов тоже минусуется.
Первое, что пришло в голову, это формат выдаваемого времени первым куском кода. Он, скорее всего, получается AM-PM, а нужно, чтобы в 24-часовом виде. Я прав? Если да, то как заставить C# давать нужный (24) формат даты?
 

Вложения

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 413
Благодарностей
3 329
Баллы
113
Windows использует свой формат времени, не unixtime (что логично).
Время файла Windows — это 64-разрядное значение, представляющее количество интервалов 100-наносекундных, истекших с 12:00 полуночи, 1 января 1601 г.
Вам нужно это:
 
  • Спасибо
Реакции: Buddha

Buddha

Client
Регистрация
10.03.2019
Сообщения
121
Благодарностей
18
Баллы
18
Windows использует свой формат времени, не unixtime (что логично).


Вам нужно это:
Ок, понял, спасибо. Реализовать такое мне не позволяет уровень, к сожалению. Значит, буду как-то корректировать время с учетом этих особенностей. Там всегда примерно одинаковое отклонение.
Но если вдруг кто-то может выложить реализацию в готовом виде, буду признателен. Да и для будущих поколений, у кого возникает "приуныл" при чтении документации, тоже будет полезно.
 

ankur

Client
Регистрация
19.05.2012
Сообщения
83
Благодарностей
47
Баллы
18
Все дело в том что unixtime не учитывает твой часовой пояс, а дату создания файла ты берёшь с учётом часового пояса. Надо так:
C#:
var time = new System.IO.FileInfo(project.Variables["profile_path"].Value).CreationTimeUtc;
return time;
Или так:
C#:
var time = File.GetCreationTimeUtc(project.Variables["profile_path"].Value);
return time;
 
  • Спасибо
Реакции: Buddha

Buddha

Client
Регистрация
10.03.2019
Сообщения
121
Благодарностей
18
Баллы
18
Все дело в том что unixtime не учитывает твой часовой пояс, а дату создания файла ты берёшь с учётом часового пояса. Надо так:
C#:
var time = new System.IO.FileInfo(project.Variables["profile_path"].Value).CreationTimeUtc;
return time;
Или так:
C#:
var time = File.GetCreationTimeUtc(project.Variables["profile_path"].Value);
return time;
Отлично! Благодарю за помощь)
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)