C # DateTime - лучший способ обрабатывать часовые пояса с fullcalendar.io? - PullRequest
0 голосов
/ 15 мая 2018

Я работаю над веб-приложением, которое использует календарь.Когда я создаю событие календаря и выбираю время начала 10:00, оно сохраняется как 09:00 (я нахожусь в Великобритании, и сейчас у нас UTC + 1, и я думаю, что это разница).

Я хотел бы знать лучший способ справиться с этим и убедиться, что пользователь из любого часового пояса выбирает в календаре 10:00 утра, что 10:00 утра записывается в базу данных.

Здесьсоответствующие биты кода. Меня особенно интересуют переменные Start и Finish, которые оба являются типами данных Datetime:

Это Javascript, чтобы поймать создание события:

eventDrop: function (calEvent, dayDelta, minuteDelta, allDay, revertFunc) {
                var event = {};
                event.EventID = calEvent.eventid;
                event.StatusString = "Update";
                event.CustomerID = calEvent.customerid;
                event.ProductID = calEvent.productid;
                event.Title = calEvent.title;
                event.Start = new Date(calEvent.start.format()); 
                event.Finish = new Date(calEvent.end.format());
                event.EventNote = calEvent.eventNote;
                event.ProductValue = calEvent.ProductValue;

Это передается обработчику SQL

                SqlCommand cmd = new SqlCommand();
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Connection = m_Connection;
                cmd.CommandText = "usp_ATP_Calendar_InsertUpdateEvent";
                [...other params...]
                cmd.Parameters.AddWithValue("@Start", eve.Start);
                cmd.Parameters.AddWithValue("@Finish", eve.Finish);
                cmd.Parameters.AddWithValue("@EventNote", eve.EventNote);

                cmd.ExecuteNonQuery();

Я добавил предупреждение на веб-страницу, которое просто event.Start.toString(), которое срабатывает при сохранении события. Это показано в этом примере:

Нажмите для получения изображения оповещения

Итак, я предполагаю, что 10:00 + 0100 равняется 9:00 утра, поэтому мое событие записывается свремя. Может кто-нибудь посоветовать лучший способ разобратьсяс этим, и, возможно, предоставьте некоторый пример кода, чтобы, если пользователь отбрасывает событие в 10:00 утра, то какое время сохраняется?

1 Ответ

0 голосов
/ 15 мая 2018

Пока вы не хотите выполнять какие-либо вычисления даты в своем приложении, самый безопасный способ - сохранить все значения в формате UTC, а затем преобразовать их в часовой пояс клиента & mdash; Таким образом, ваш код не будет зависеть от сервера, который его выполняет.

Это означает, что вам не нужно экономить 10:00 в своем магазине, вы сначала переводите его в часовой пояс клиента учета UTC. Затем преобразуйте его обратно в часовой пояс клиента, когда вы хотите показать его.

Этот подход обычно не применим, поэтому попробуйте проверить ссылки 1 , 2 и 3 для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...