Когда вы сохраняете файлы журналов Siemens WinCC Flexible в виде текстовых файлов, у вас будет одно поле для даты и времени, а другое поле для тиков:
TimeString
Time_ms
"2024-03-16 00:38:20"
45367026614.6759
"2024-10-30 17:17:54"
45595720764.7685
Поскольку в поле даты и времени не отображаются миллисекунды, мне пришлось использовать другое поле, чтобы получить значение.
После некоторых проблем я понял, что Siemens использует дату 30 декабря. , 1899 год в качестве даты начала. Я не знаю, как они пришли к этой дате.
Наконец-то мне удалось преобразовать тики в дату и время.
Теперь мой Вопрос касается преобразования даты и времени в такую галочку.
Кто-нибудь знает решение?
Насколько я знаю, моя проблема заключается в "< Strong>DateTimeToSiemensTime».
Вот что я сделал:
double mainTick = 45590722754.8727;
DateTime dt = SiemensTimeToDateTime(mainTick);
double calcTick = DateTimeToSiemensTime(dt);
double diff = calcTick - mainTick;
DateTime SiemensTimeToDateTime(double Time_ms)
{
// Julian Date (JD): Jan 1st, 1900
// Dublin Julian Date (DJD): Dec 31st, 1899
// Siemens: Dec 30rd, 1899 --- WHY??!!!!!
// Start with new date object as Dec 30th, 1899.
// Divide Time_ms by 1000000 to get the number of Days.
DateTime StartDateTime = new DateTime(1899, 12, 30, 0, 0, 0);
return StartDateTime.AddDays(Time_ms / 1_000_000);
}
double DateTimeToSiemensTime(DateTime DateTime)
{
DateTime StartDateTime = new DateTime(1899, 12, 30, 0, 0, 0);
TimeSpan ts = DateTime.Subtract(StartDateTime);
return (double)(ts.Ticks) / 1_000_000;
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... vice-versa