c#:获取存储在日期对象中的时区偏移量

时间:2018-01-22 09:52:51

标签: c# datetime timezone timezone-offset

我将从API响应中获取日期:

string jsonResponse = @"{'endDate': '/Date(-62135578800000-0500)/'}";

现在,当我使用NewtonSoft.json反序列化响应时,我得到的结果为:

MyClass obj = JsonConvert.DeserializeObject<MyClass>(jsonResponse);
Console.WriteLine(obj.endDate); // 1/1/0001 5:00:00 AM

现在再次进行一些操作后,我必须以与收到日期相同的格式将数据发布到服务器:

DateTime endDateValue = new DateTime();
endDateValue = obj.endDate

MyClass objNew = new MyClass{
    endDate = endDateValue
};
string jsonPostData = JsonConvert.SerializeObject(objNew);

string response = JsonConvert.SerializeObject(jsonPostData);
Console.WriteLine(response);//{"endDate":"0001-01-01T05:00:00+00:00"}

因为我不想要这种格式"0001-01-01T05:00:00+00:00"。它应与'/Date(-62135578800000-0500)/'相同。

直到现在我按照此链接了解格式的类型: PHP date format /Date(1365004652303-0500)/

我能够得到这样的时间戳:

DateTime unixStart = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc);
long unixTimeStampInTicks = (endDateValue.ToUniversalTime() - unixStart).Ticks;
Console.WriteLine(unixTimeStampInTicks/10000);//-62135578800000

c#中是否有任何方法可以获取此日期对象中存在的偏移值-0500,如javascript getTimezoneOffset()方法返回偏移量。

1 个答案:

答案 0 :(得分:2)

只需使用DateTimeOffset,而不是DateTime - 这是一个类似的结构,只有明确的Offset属性。普通DateTime没有时区概念。

这意味着在MyClass中使用它,并反序列化它。