Проблема
Формат DateTime изменяется с 2019-04-09T11: 43: 11Z на 2019-04-09T11: 43: 11 + 00: 0 моего сообщения очереди.
Подробности
Рассмотрим две функции лазури F1 и F2 . F1 помещает сообщение в f2-queue
.
Рассмотрим следующие классы для понимания подготовки сообщения:
public class MyRequest
{
public int Id {get; set;}
public object Obj {get; set;}
}
public Class MyMessage
{
public DateTime UpdatedDate {get; set;}
}
Я использую ADO.NET для чтения из базы данных.
myMessage.UpdatedDate = DateTime.SpecifyKind(Convert.ToDateTime(reader["Updated_Date"]), DateTimeKind.Utc);
myRequest.Obj = myMessage;
Я сериализуюmyRequest
с использованием JsonConvert.SerializeObject
.Дата сериализованного объекта имеет время 2019-04-09T11: 43: 11Z .Я ставлю в очередь myRequest
в f2-queue
.
F2 - это очередь, запускаемая функция лазури .
[FunctionName("F2")]
public static async Task Run([QueueTrigger("f2-queue", Connection = "")]MyRequest myRequest, ILogger log)
Здесь в myRequest формат DateTime UpdatedDate
меняется на 2019-04-09T11: 43: 11 + 00: 00 .
Вещи, которые я пытался
- Поместил свойство DateTime в
MyRequest
и сохранил в нем DateTime.UtcNow.Формат DateTime в этом случае не изменяется. - Похоже, что +00: 00 изменяется в соответствии с часовым поясом, установленным на машине, на которой выполняется код.
- Первоначально использовался
DateTime.TryParse(reader["Updated_Date"].ToString(), out DateTime lastUpdatedDate)
и заметил, что DateTime.Kind
было Не указано .Изменился на вышеупомянутый подход.DateTime.Kind теперь равен Utc , но формат DateTime все еще меняется. - Вместо назначения значения из базы данных назначается DateTime.UtcNow.Формат все еще меняется.Похоже, что нет никаких проблем с присвоением значения.
- Заглянул в очередь, используя Storage Explorer .Само сообщение имеет прекрасный формат DateTime.