Преобразование тактов WinCC в DateTime C# и наоборотC#

Место общения программистов C#
Ответить
Anonymous
 Преобразование тактов WinCC в DateTime C# и наоборот

Сообщение Anonymous »

Когда вы сохраняете файлы журналов 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 год в качестве даты начала. Я не знаю, как они пришли к этой дате.
Наконец-то мне удалось преобразовать тики в дату и время.
Теперь мой вопрос касается преобразования даты и времени в такую ​​галочку.
Цель — преобразовать поля этой таблицы друг в друга.
Кто-нибудь знает решение?
Насколько я знаю, моя проблема связана с функцией «DateTimeToSiemensTime».
Это то, что я готово:
double mainTick = 45590722754.8727; //"2024-10-25 17:20:46", as shown in log file
DateTime dt = SiemensTimeToDateTime(mainTick);
double calcTick = DateTimeToSiemensTime(dt);
double diff = calcTick - mainTick; //Goal: This should be zero but it isn't!

DateTime SiemensTimeToDateTime(double siemensTime)
{
// Julian Date (JD): Jan 1st, 1900
// Dublin Julian Date (DJD): Dec 31st, 1899
// Siemens: Dec 30th, 1899 --- WHY??!!!!!

// Start with new date object as Dec 30th, 1899.
// Divide siemensTime by 1000000 to get the number of Days.

DateTime startDateTime = new DateTime(1899, 12, 30, 0, 0, 0);
return startDateTime.AddDays(siemensTime / 1_000_000d);
}

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_000d;
}


Подробнее здесь: https://stackoverflow.com/questions/791 ... vice-versa
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»