如何将C#日期时间值转换为UTC时区

时间:2018-12-21 10:45:23

标签: c# datetime

我需要使用以下格式将DateTime类型的值传递给API

2018-12-02T07:00:00.000Z //required format

但是我从Db得到的datetime值是

2018-10-25 05:30:00.0000000

现在使用.ToString("o"),该值的格式为

2018-10-25T05:30:00.0000000

在下面的SO链接中选中了

Where's the DateTime 'Z' format specifier?

http://stackoverflow.com/questions/9163977/converting-datetime-to-z-format

但不能转换为所需的格式。

我的理解是,日期时间中的Z代表UtcTimeZone。

2 个答案:

答案 0 :(得分:1)

您是否正在寻找类似的东西?

var baseTime = DateTime.Parse("2018-10-25 05:30:00.0000000");
var utcTime = baseTime.ToUniversalTime();
Console.WriteLine(utcTime.ToString("yyyy-MM-ddTHH:mm:ss.fffZ"));

您可以在这里尝试:https://dotnetfiddle.net/HsdMcu

如果您所在地区有夏,冬两季,则可能需要使用更复杂的方法来正确解析初始时间,该方法可以在this answer中找到。

答案 1 :(得分:0)

假设来自数据库的时间是本地时间,则必须首先将类型设置为本地,然后转换为通用时间:

DateTime dateFromDB = DateTime.ParseExact(
    "2018-10-25 05:30:00.0000000",
    "yyyy-MM-dd HH:mm:ss.fffffff",
    System.Globalization.CultureInfo.CurrentCulture,
    System.Globalization.DateTimeStyles.AssumeLocal
);
Console.WriteLine(dateFromDB.ToUniversalTime().ToString("o"));
// the above will return different values depending on your local timezone
// e.g. for +05:30 it would return 2018-10-25T00:00:00.0000000Z