Стартовая страница › Форумы › Понять, как работает ПО › Формулы › Перевод Unix time в дату время
Помечено: Unix time
- В этой теме 6 ответов, 3 участника, последнее обновление 4 года назад сделано
trv.
-
АвторСообщения
-
07.06.2022 в 12:21 #23934
trv
УчастникДобрый день, подскажите как перевести данные времени представленных как Unix time в дату время которые нормально отображаются в веб клиенте.
Сделал новое поле до расчетное телеизмерений использовал как и встроенную формулу DecodeDate(Val(101)) так и свой код.
вариант 1. public static DateTime DecodeUnixDat (double timestamp)
{
DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
DateTime last = origin.AddSeconds(timestamp).ToLocalTime();
return last;
}.
Вариант 2.
public DateTime UNTime (double se)
{long sec=Convert.ToInt64(se);
DateTimeOffset dateOffset = DateTimeOffset.FromUnixTimeSeconds(sec);
DateTime dateOff=dateOffset.LocalDateTime;
return dateOff;
}
но на выходе какие то неопределенные значения ! — либо дата 30.12.1899 00:00:00Коды как бы рабочие время возвращают по может форматы не совпадают с используемым в RapidScada, или нужно приводить к другим типам данных при помощи методов ToOADate() либо FromOADate.
И как данныю метку времени прикрепить к другому каналу?
И есть ли какая то инструкция по созданию своего драйвера либо у кого то есть наработки по подключению к веговскому серверу по средствам websocket-
Тема изменена 4 года назад пользователем
trv. Причина: Ошибки
07.06.2022 в 12:23 #23936
manjey73УчастникDateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0); по идее это не Unix Time хоть вы в него и вводите начальные значения времени Unix
07.06.2022 в 12:29 #23937trv
УчастникЯ получаю смещение от данной даты, что бы получить реальное время нужно к 1.1.1970 прибавить получены данные в секундах
07.06.2022 в 12:46 #23938
manjey73УчастникЧтобы в канале отобразить время, установив формат DateTime то да, его надо приводить к double ToOADate() канал содержит именно double а не структуру DateTime
Вроде как устанавливая 1970-й год надо еще указать DateTimeKind.UTC
DateTime dateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
И уже потом таймштамп прибавлять
07.06.2022 в 15:42 #23944
MikhailМодераторДобрый день!
Кажется, уже были на форуме такие вопросы. Попробуйте воспользоваться поиском.
Для Rapid SCADA нужно преобразовать DateTime в double методом EncodeDate (см. таблицу Формулы) или ToOADate(), что примерно то же самое.07.06.2022 в 15:44 #23945
MikhailМодераторС помощью https://dotnetfiddle.net/ проверьте, что Ваше преобразование корректно. А затем примените к нему EncodeDate или ToOADate для получения double.
09.06.2022 в 07:34 #23973trv
УчастникПреобразование корректно, после своего скрипта использовал приведение ToOADate дата стала отображаться в читаемом виде
-
Тема изменена 4 года назад пользователем
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.