gpt4 book ai didi

c# - 如何格式化 DateTime 结构,使其与 DataContractJsonSerializer 使用的格式相匹配?

转载 作者:太空宇宙 更新时间:2023-11-03 14:17:15 25 4
gpt4 key购买 nike

当我使用 DataContractJsonSerializer 将当前时间序列化为 DateTime 时,我得到以下 1307654074638-0500

我想生成我自己的 JSON,它可以被 DataContractJsonSerializer 反序列化,但我不知道如何生成具有相同格式的 DateTime .

我相信它使用自纪元以来的毫秒数作为基础,但我一直得到大约 6 小时的数字。我相信这与时区(我在中部时间)有关,这是有道理的。

var myDate = DateTime.Now;
var epoch = new DateTime(1970, 01, 01, 01, 0, 0);
var serializer = new DataContractJsonSerializer(typeof (DateTime));
var ms = new MemoryStream();
serializer.WriteObject(ms, myDate);
Console.WriteLine(Encoding.UTF8.GetString(ms.ToArray()));
Console.WriteLine((myDate.AddTicks(-epoch.Ticks)).Ticks / 10000);

输出

"\/Date(1307654587318-0500)\/"
1307632987318

或者为了更容易比较

1307654587318-0500
1307632987318

最佳答案

我建议您使用 DataContractJsonSerializer 类来获取所需格式的数据。如果做不到这一点,您可以按照以下方式做一些事情:

using System;
using System.Globalization;
using System.IO;
using System.Runtime.Serialization.Json;
using System.Text;

namespace SO6299496
{
class Program
{
static void Main()
{
var myDate = DateTime.Now;
var serializer = new DataContractJsonSerializer(typeof(DateTime));
var ms = new MemoryStream();
serializer.WriteObject(ms, myDate);
Console.WriteLine(Encoding.UTF8.GetString(ms.ToArray()));
Console.WriteLine(SerializeDate(myDate));

}


static string SerializeDate(DateTime value)
{
var epoch = new DateTime(1970, 01, 01, 01, 0, 0);

long date = (value.ToUniversalTime().Ticks - epoch.Ticks) / 10000;
string sign = "";
string offset = "";

if (value.Kind == DateTimeKind.Unspecified || value.Kind == DateTimeKind.Local)
{
TimeSpan utcOffset = TimeZone.CurrentTimeZone.GetUtcOffset(value.ToLocalTime());
sign = utcOffset.Ticks >= 0L ? "+" : "-";
int offsetHours = Math.Abs(utcOffset.Hours);
int offsetMinutes = Math.Abs(utcOffset.Minutes);
offset = (offsetHours < 10) ? ("0" + offsetHours) : offsetHours.ToString(CultureInfo.InvariantCulture);
offset += (offsetMinutes < 10) ? ("0" + offsetMinutes) : offsetMinutes.ToString(CultureInfo.InvariantCulture);
}

return date + sign + offset;
}
}
}

但我想重申,您最好使用 DataContractJsonSerializer。为什么要发明已经发明的东西?

关于c# - 如何格式化 DateTime 结构,使其与 DataContractJsonSerializer 使用的格式相匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6299496/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com