如何使用datetime将时区解析为datetime参数

时间:2016-06-23 10:32:02

标签: c# datetime format

我正在使用saber soap API进行航班预订。

我有一个DateTime对象需要一个带时区的参数。输入应该像"2016-03-01T10:00:00-06:00"

目前我正在获得像

这样的价值
DateTime dt = DateTime.UtcNow;
string date = dt.ToString();
string tstamp = dt.ToString("mm-dd-yyyyTHH:mm:sszzz");
DateTimeOffset tstamp = DateTimeOffset.Parse(date);
DateTime datetime = tstamp.DateTime;

但是当我将其转换回DateTime时,时区会自动删除。我无法将对象转换为DateTimeoffset,因为API要求DateTime格式。

2 个答案:

答案 0 :(得分:2)

我认为这可以帮助您,可以获得您想要的日期时间或获取TimeSpan的偏移量,然后根据需要将其添加到您的日期时间或保存。

编辑: 现在我看到你可能只需要从DateTimeOffset对象获取字符串,而不是从DateTime对象获取字符串。

DateTime dt = DateTime.UtcNow;
string date = dt.ToString();
string tstampString = dt.ToString("MM-dd-yyyyTHH:mm:ssZZZ");

DateTimeOffset tstampDT = DateTimeOffset.Parse(date);

DateTime datetimeCurrent = tstampDT.DateTime;
DateTime datetimeUTC = tstampDT.UtcDateTime;
DateTime datetimeLocal = tstampDT.LocalDateTime;
TimeSpan offsetFromUTC = tstampDT.Offset;

编辑:

string tstampOffsetString = tstampDT.ToString("MM-dd-yyyyTHH:mm:sszzz");

答案 1 :(得分:0)

我试着解释一些事情;

  

我有一个DateTime对象,需要一个参数   时区。

不,你没有

DateTime没有任何隐式格式。它只有日期和时间值。 "格式"当您获得 textual (又名string)表示时,概念适用。所以你可能有一个字符串有偏移部分而不是DateTime。

  

但是当我将其转换回DateTime时,时区会被删除   自动..

DateTime本身不包含真实的时区信息。它可以知道它是UTC还是Local,但本地真正意味着什么。此外DateTimeOffset也没有时区信息。它只有一个DateTimeUTC Offset。但是这些信息不足以确定时区,因为不同的时区可能具有相同的偏移量。

但是,如果您真的想要生成"2016-03-01T10:00:00-06:00"输入,我可以提供2种方式甚至我不建议;

根据该值生成相关的DateTime实例,将您的系统时区设置为6小时后作为offfset部分(因为不建议使用zzz format specifier的DateTime不相关Kind属性)并格式化您的DateTime;

DateTime dt = new DateTime(2016, 3, 1, 10, 0, 0);
Console.WriteLine(dt.ToString("yyyy-MM-ddTHH:mm:sszzz"));
// 2016-03-01T10:00:00-06:00

在格式化之后,根据DateTime和offset部分生成DateTimeOffset实例;

var dto = new DateTimeOffset(dt, TimeSpan.FromHours(-6));
Console.WriteLine(dto.ToString("yyyy-MM-ddTHH:mm:sszzz"));
// 2016-03-01T10:00:00-06:00