Форум программистов, компьютерный форум, киберфорум
C#: Базы данных, Entity Framework
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 25.04.2020
Сообщений: 136
1
.NET Core

Учет временной зоны при работе с полем времени (EF Core)

30.10.2020, 16:20. Показов 1913. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет! Не могу понять, как правильно работать с временными полями (DateTime) – сохранять и читать их из базы с учетом временной зоны? У меня есть какой-то класс, содержащий поле DateTime. Он вроде бы отлично пишется и читается из базы (datetime/timestamp). Но как быть с временной зоной? Насколько я понял в базу записывается локальный DateTime, не происходит перевод в UTC (нулевая временная зона) или во временную зону базы.

Мой часовой пояс +3, у меня сейчас 16 часов (13 по UTC), если во временное поле экземпляра положить DateTime.Now и сохранить этот экземпляр класса в базу, то в базе я увижу 16 часов. И вот программа открыта на нескольких машинах, расположенных в разных часовых поясах, с которых ведется работа с базой, как потом работать со временем? Не зная временную зону, нельзя будет даже отсортировать эти данные по порядку, так как 16 часов по Москве (+3) наступает раньше, чем 15 в Варшаве (+1)!

Да, можно в поле времени класть не DateTime.Now, а DateTime.UtcNow, но это криво. Лучше хранить даты в том часовом поясе, на который настроена база, чтобы все временные данные могли нормально коррелировать между собой, а то дата полученная CURRENT_TIMESTAMP, запишет время в часовом поясе базы. Так как правильно организовать работу со временем? Выставить нулевую временную зону (UTC) у базы и экземпляры классов должны содержать UTC время? Или какая-то синхронизация есть?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.10.2020, 16:20
Ответы с готовыми решениями:

индукционная варка Hansa FCEW53000 ошибки E4,E5 при работе правой зоны
собственно правая зона IHE рабочая ,но стоит закипеть воде в посуде, как тут же вываливается в эту...

Как через pattern сделать форматирование временной зоны?
Формат типа -3, -2, -1, 0, +1, +2, +3 и.т.д

Ошибка из-за пробела при работе с полем *FirstCap
Добрый день! При настройке полей в типовом договоре возникает ошибка из-за пробела в работе...

Undefined reference при работе с статическим полем класса
Здравствуйте. Вот пример: class A { public: A(); A(const A&); ~A();

7
 Аватар для Andrey-MSK
2889 / 2007 / 371
Регистрация: 14.08.2018
Сообщений: 6,549
Записей в блоге: 4
30.10.2020, 16:30 2
MrKamaBullet05, в MS SQL Server есть тип данных DATETIMEOFFSET, который работает с часовыми поясами.
https://docs.microsoft.com/ru-... rver-ver15
1
0 / 0 / 0
Регистрация: 25.04.2020
Сообщений: 136
30.10.2020, 16:42  [ТС] 3
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
в MS SQL Server есть тип данных DATETIMEOFFSET
Забыл написать, что я работаю с MySQL
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
30.10.2020, 19:28 4
Мне кажется, что время надо фиксировать как серверное (SQL-server), приводя его "туда" при записи и "обратно" при чтении.
При условии, кончено, что сам сервер "прописку" не меняет

Добавлено через 3 минуты
Вот вроде подходящая статья https://habr.com/ru/post/69614/
1
0 / 0 / 0
Регистрация: 25.04.2020
Сообщений: 136
31.10.2020, 01:12  [ТС] 5
Цитата Сообщение от MsGuns Посмотреть сообщение
Вот вроде подходящая статья https://habr.com/ru/post/69614/
Интересная статья, но проблема не решена.

Вот смотрите, в базе время я храню timestamp, а не datatime. Сервер с базой имеет временной пояс +3 (Москва):
SQL
1
SELECT TIMEDIFF(CURRENT_TIMESTAMP(), utc_timestamp()); // результат = 03:00:00
У меня есть программа которая работает на ПК пользователей, записывает время в объект и сохраняет объект в базу:
SQL
1
obj.DateTime = DateTime.Parse("2020-10-13T19:00:00+0300");
Теперь рассмотрим несколько ситауаций:

1) Программа открыта на ПК с временной зоной +3 (Москва)
C#
1
2
Console.WriteLine(obj.DateTime?.ToString()); 
// 2020-10-13 19:00:00
Смотрю данные в базе через phpMyAdmin и вижу 2020-10-13 19:00:00
Все окей, временные зоны базы и ПК совпали, следовательно видим одно и тоже значение.

2) Программа открыта на ПК с временной зоной +6:30 (Янгон)
C#
1
2
Console.WriteLine(obj.DateTime?.ToString()); 
// 13.10.2020 22:30:00 // когда в Мск будет 19:00, в Янгоне будет уже 22:30, все верно
Смотрю данные в базе через phpMyAdmin и вижу 2020-10-13 22:30:00!!!
Ошибка! Я должен был увидеть все тоже время 19:00, а не 22:30, так как переменная obj.DateTime содержала одно и тоже время, но лишь финальное отображение (значение в коносоли) было подстроено под локальное время ПК. Что делать то?!
0
 Аватар для Andrey-MSK
2889 / 2007 / 371
Регистрация: 14.08.2018
Сообщений: 6,549
Записей в блоге: 4
03.11.2020, 10:30 6
MrKamaBullet05, нечто подобное в MySQL есть?
T-SQL
1
2
3
4
5
6
7
SELECT
    GETDATE() AS [GETDATE],
    CURRENT_TIMESTAMP AS [CURRENT_TIMESTAMP],
    GETUTCDATE() AS [GETUTCDATE],
    SYSDATETIME() AS [SYSDATETIME],
    SYSUTCDATETIME() AS [SYSUTCDATETIME],
    SYSDATETIMEOFFSET() AS [SYSDATETIMEOFFSET]
Вывод на скрине
Миниатюры
Учет временной зоны при работе с полем времени (EF Core)  
1
0 / 0 / 0
Регистрация: 25.04.2020
Сообщений: 136
03.11.2020, 19:49  [ТС] 7
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
нечто подобное в MySQL есть?
Системное время у базы можно изменить, если Вы про это.
0
 Аватар для Andrey-MSK
2889 / 2007 / 371
Регистрация: 14.08.2018
Сообщений: 6,549
Записей в блоге: 4
05.11.2020, 08:49 8
MrKamaBullet05, это не про изменить Это функции MS SQL Server, которые отображают время в разных представлениях, включая часовые пояса и UTC. Интерес представляет GETUTCDATE(), она возвращает время UTC вне зависимости от часового пояса места расположения компьютера. Ну и SYSUTCDATETIME() - это дата и время UTC сервера.
1
05.11.2020, 08:49
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.11.2020, 08:49
Помогаю со студенческими работами здесь

Учет действий пользователя при работе с СУБД
Доброго времени суток! Подскажите пожалуйста как можно сделать в СУБД 1. программное создание...

Как избавиться от вывода ToolBox при работе с собственным полем со списком на Листе Екселя
Добавил на лист Ексел2000 поле со списком на него повесил форму, все обработал, да и работает все...

Ошибка при работе с FastReport.Core
Пытаюсь сделать fp3 to pdf конвертор, но при обращении к библиотеке Report выдается ошибка ...

Лаги при работе с Core под IIS
В общем есть в солюшене 3 проекта на asp.net core. Переодически их запуск сопровождается жуткими...

Остановка (отставание) времени в DOS приложении при работе в
Здравствуйте Знатоки, столкнулись со следующей проблемой: при работе в фоновом режиме графические...

ServerSocket и ClientSocket при работе с данными реального времени
Здравствуйте! Построил сервер и клиент используя ServerSocket и ClientSocket. В программе есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Создание макробота, как способа экономии времени и варианта ИИ.
Hrethgir 28.01.2025
Чисто теоретически, создание ИИ на ПК можно разделить на части. Создать бота отвечающего за железо (эмулирование вкл, выкл, мышь, клавиатура), другой бот осуществляет распознавание изображений,. . .
[Golang] 121. Best Time to Buy and Sell Stock
alhaos 28.01.2025
В этой задаче мы получаем слайс целых чисел, которые означают цену акции в разные моменты времени, и должны вернуть максимально возможную прибыль от купли продажи акции. / / . . .
Проектирование и моделирование
hw_wired 28.01.2025
Введение в моделирование Моделирование представляет собой один из фундаментальных методов научного познания, который позволяет изучать объекты и явления через создание их упрощенных аналогов. В. . .
Алгоритмы и исполнители
hw_wired 28.01.2025
Введение в алгоритмы В современном мире информационных технологий алгоритмы играют основополагающую роль в решении различных задач и автоматизации процессов. Алгоритм представляет собой точную. . .
Хранение информации
hw_wired 28.01.2025
Введение: Роль систем хранения информации в современном мире В современную эпоху цифровых технологий эффективное хранение информации становится одним из ключевых факторов успешного развития любой. . .
Обработка числовой информации
hw_wired 28.01.2025
Введение в обработку числовой информации В современном мире обработка числовой информации стала неотъемлемой частью как профессиональной деятельности, так и повседневной жизни. Электронные таблицы. . .
Мультимедиа
hw_wired 28.01.2025
Введение в мультимедийные технологии В современном мире мультимедийные технологии стали неотъемлемой частью нашей жизни, проникнув во все сферы человеческой деятельности. Термин "мультимедиа". . .
Обработка текстовой информации
hw_wired 28.01.2025
Введение в обработку текстовой информации В современном мире обработка текстовой информации играет фундаментальную роль в различных сферах человеческой деятельности. Текстовые редакторы стали. . .
Обработка графической информации
hw_wired 28.01.2025
Введение в компьютерную графику Компьютерная графика стала неотъемлемой частью современного цифрового мира, пройдя впечатляющий путь развития от простейших черно-белых изображений до сложных. . .
Python в Алгоритмике: Решение задач
hw_wired 28.01.2025
Введение в Python и Алгоритмику В современном мире программирование стало неотъемлемой частью образования и профессионального развития. Python зарекомендовал себя как один из самых популярных и. . .
Компьютер как универсальное устройство для работы с информацией
hw_wired 28.01.2025
Введение в устройство компьютера Компьютер представляет собой универсальное электронное устройство, предназначенное для автоматической обработки информации. В современном мире компьютер стал. . .
Информация и информационные процессы
hw_wired 28.01.2025
Понятие информации и ее виды В современном мире информация является одним из фундаментальных понятий, пронизывающих все сферы человеческой деятельности. Под информацией понимают любые сведения об. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru