首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Azure函数将队列消息的ISO8601 UTC DateTime格式修改为本地DateTime格式

Azure函数将队列消息的ISO8601 UTC DateTime格式修改为本地DateTime格式
EN

Stack Overflow用户
提问于 2019-04-09 17:58:24
回答 1查看 867关注 0票数 0

问题

DateTime格式从2019-04-09T11:43:11Z更改到2019-04-09T11:43:11+00:0我的队列消息。

详细信息

考虑两个蔚蓝函数F1F2F1f2-queue中对消息进行排队。

为理解信息的编写,请考虑以下类:

代码语言:javascript
复制
public class MyRequest
{
    public int Id {get; set;}
    public object Obj {get; set;}
}

public Class MyMessage
{
    public DateTime UpdatedDate {get; set;}
}

我正在使用ADO.NET从数据库中读取。

代码语言:javascript
复制
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是由队列触发的azure函数

代码语言:javascript
复制
[FunctionName("F2")]
        public static async Task Run([QueueTrigger("f2-queue", Connection = "")]MyRequest myRequest, ILogger log)

在这里,在2019-04-09T11:43:11+00:00.中,UpdatedDate的DateTime格式更改为

我试过的东西

  • 将DateTime属性放置在MyRequest本身中,并将DateTime.UtcNow存储在其中。在这种情况下,DateTime格式不会改变。
  • 似乎+00:00根据代码正在运行的计算机中设置的时区进行更改。
  • 最初使用的是Unspecified.,并注意到DateTime.KindDateTime.Kind改为上述方法。DateTime.Kind现在是Utc,但DateTime格式仍在改变。
  • 而不是从数据库中分配值,而是分配DateTime.UtcNow。格式仍在改变。在赋值方面似乎没有问题。
  • 使用存储资源管理器查看队列。消息本身具有非常好的DateTime格式。
EN

回答 1

Stack Overflow用户

发布于 2019-04-16 14:59:08

这似乎是因为Newtonsoft在将DateTimes设置为UTCvs.Local时是如何序列化的。为了改变这个服务器端,您可以使用一个DateFormatString设置来覆盖默认值。

我使用控制台应用程序对其进行了测试,但是函数中的行为应该是相同的。函数项目的基础WebJob是基于控制台应用程序的。

代码语言:javascript
复制
namespace ConsoleApp8
{   
    class Program
    {
        static void Main(string[] args)
        {
            var serializerSettings = new JsonSerializerSettings()
            {
                DateFormatString = "yyyy-MM-ddThh:mm:ssZ"
            };

            Console.WriteLine($"DateTime.Now: {JsonConvert.SerializeObject(DateTime.Now)}, DateTime.Now Kind: {DateTime.Now.Kind}");
            Console.WriteLine($"DateTime.UtcNow: {JsonConvert.SerializeObject(DateTime.UtcNow)}, DateTime.UtcNow Kind: {DateTime.UtcNow.Kind}");
            Console.WriteLine($"DateTime.Now with formatting: {JsonConvert.SerializeObject(DateTime.Now, serializerSettings)}, DateTime.Now Kind: {DateTime.Now.Kind}");

            Console.ReadLine();
        }
    }
}

守则输出以下内容:

DateTime.Now:"2019-04-16T10:53:54.6557713-04:00",DateTime.Now种类:本地 DateTime.UtcNow:"2019-04-16T14:53:54.9357612Z",DateTime.UtcNow种类: Utc DateTime.Now格式:“2019-0416T10:53:54Z”,DateTime.Now种类:本地

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55598626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档