Добрый день, подскажите как перевести данные времени представленных как 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
Эта тема была изменена 1 год, 9 месяцев назад от trv. Причина: Ошибки
Чтобы в канале отобразить время, установив формат DateTime то да, его надо приводить к double ToOADate() канал содержит именно double а не структуру DateTime
Вроде как устанавливая 1970-й год надо еще указать DateTimeKind.UTC
Добрый день!
Кажется, уже были на форуме такие вопросы. Попробуйте воспользоваться поиском.
Для Rapid SCADA нужно преобразовать DateTime в double методом EncodeDate (см. таблицу Формулы) или ToOADate(), что примерно то же самое.
С помощью https://dotnetfiddle.net/ проверьте, что Ваше преобразование корректно. А затем примените к нему EncodeDate или ToOADate для получения double.