У меня есть два приложения.Клиентское приложение и серверное приложение.
Клиентское приложение отправляет HTTP-запрос на сервер, где тело запроса содержит DateTime
.
На сервере, который я получаю, DateTime
преобразуйте его в Ticks
и сохраните в базе данных SQLite.(Вы можете поспорить о том, почему Ticks, но именно так строится это приложение ..)
Пока все хорошо.
Не намного позже (через несколько минут) серверное приложение выполняетзапрос к базе данных, где он пытается запросить все записи за последние 30 минут.
В коде я делаю что-то вроде этого, чтобы получить текущий DateTime
минус 30 минут:
DateTimeOffset.Now.AddMinutes(-30).Ticks;
По какой-то причине это число больше, чем отметка времени вновь созданных записей.
Возможно, я что-то упускаю, но просто не вижу этого ...
Вот фрагмент кода, который идеально имитирует мою проблему.(Ссылка на рабочий демо внизу поста)
public static void Main()
{
////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Client app
////////////////////////////////////////////////////////////////////////////////////////////////////////////
var clientTimestamp = DateTimeOffset.Now.DateTime;
var jsonDateTime = clientTimestamp.ToString("yyyy-MM-ddThh:mm:ss.fffZ");
// Then, the client app sends data as JSON to the server app...
////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Server app
////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Mimick as if we received a json string with a DateTime in it. Parse that back to a real DateTime object.
// This is also the value that will be stored in the database
var serverDateTime = DateTime.Parse(jsonDateTime);
Console.WriteLine("Ticks serverDateTime: " + serverDateTime.Ticks.ToString());
// A minute or so later, a recurring job checks the database for newly added records in the range of: 30 minutes ago till now.
// Create a new DateTime Now minus 30 minutes... Both Ticks values below are greater than the jsonDateTime ticks?
// DateTimeOffset:
// This value is larger, even with the minus -10 minutes?
var nowDateTimeOffset = DateTimeOffset.Now.AddMinutes(-10).Ticks.ToString();
Console.WriteLine("Ticks nowDateTime -10 minutes: " + nowDateTimeOffset);
// DateTime
// This value is larger, even with the minus -10 minutes?
var nowDateTime = DateTimeOffset.Now.AddMinutes(-10).Ticks.ToString();
Console.WriteLine("Ticks nowDateTime -10 minutes: " + nowDateTime);
}
Вот демо: https://dotnetfiddle.net/58Un0p