C# 使用时区解析DateTime

C# 使用时区解析DateTime,c#,datetime,C#,Datetime,这是我的密码: DateTime dateTime; string str = "2016-02-11 23:02:30 -0500"; if (!DateTime.TryParse(str, out dateTime)) { } 我收到了作为日期时间结果的{2/12/2016 7:02:30 am}。但我想获得2016年11月2日的2,有可能吗?我想您正在寻找TimeZoneInfo: DateTime dateTime; string str = "2016-02-11 23:02:30

这是我的密码:

DateTime dateTime;
string str = "2016-02-11 23:02:30 -0500";
if (!DateTime.TryParse(str, out dateTime))
{

}

我收到了作为日期时间结果的
{2/12/2016 7:02:30 am}
。但我想获得2016年11月2日的
2
,有可能吗?

我想您正在寻找
TimeZoneInfo

DateTime dateTime;
string str = "2016-02-11 23:02:30 -0500";
if (!DateTime.TryParse(str, out dateTime))
{
    // error
}

dateTime = DateTime.SpecifyKind(dateTime, DateTimeKind.Unspecified);

var serverTimeZone = TimeZoneInfo.Local; // Server time zone
var allTimeZones = TimeZoneInfo.GetSystemTimeZones(); // Time zone list

var clientTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Hawaiian Standard Time");

// DateTime in server time zone
var dateTimeZone = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(dateTime, clientTimeZone.Id, serverTimeZone.Id);
看看这把小提琴:

注意:

请记住,
DateTime
不包含时区信息

“开发人员负责通过某种外部机制跟踪与日期时间值关联的时区信息”


您需要使用DateTimeOffset.Parse()将字符串解析为具有表示的偏移量的DateTimeOffset对象,然后将其格式化为不带偏移量的字符串(示例中为“yyyy-MM-dd HH:MM:ss”)

由于您的字符串有值,我会将其解析为而不是
DateTime

DateTimeOffset dto;
string str = "2016-02-11 23:02:30 -0500";
if (DateTimeOffset.TryParse(str, CultureInfo.InvariantCulture, DateTimeStyles.None, out dto))
{
   //Success
}
现在您有了一个
DateTimeOffset
作为
{11.02.2016 23:02:30-05:00}
,您可以使用它返回
11.02.2016 23:02:30


尝试
DateTime.ParseExact
是否要更改IDE中DateTime的外观?或者您想更改它向用户显示的方式?第一,它来自于制度;您可以更改系统的日期时间设置。对于第二个,请尝试将datetime格式化为所需格式。