如何将字符串转换为本地日期时间?

ton*_*ony 5 .net c# datetime parsing

我正在尝试转换这种格式的字符串:

MM/dd/yyyy HH:mm
Run Code Online (Sandbox Code Playgroud)

输入来自美国数据库,因此,即:09/20/2010 14:30

我知道我的字符串始终是美国时间,但是当我显示它时,我需要将其转换为当地时间,因此该字符串应转换为:

09/20/2010 19:30 (for UK for instance)
Run Code Online (Sandbox Code Playgroud)

我尝试了一些方法,但当我在美国机器上运行而不是在我尝试过的英国或通用电气机器上运行时,似乎没有任何东西可以给我正确的解决方案:

CompletedDttm = DateTime.ParseExact(value, "MM/dd/yyyy HH:mm", CultureInfo.CurrentCulture);
CompletedDttm = DateTime.ParseExact(value, "MM/dd/yyyy HH:mm", new CultureInfo("en-US"));
Run Code Online (Sandbox Code Playgroud)

它们都在本地工作(美国机器),但不会将欧洲机器上的时间转换为当地时间。

谢谢托尼

Ste*_*end 4

试试这个 - 它将本地时间(以美国格式输入)转换为 GMT,然后以 GB/DE 格式打印。

var zones = TimeZoneInfo.GetSystemTimeZones();    // retrieve timezone info
string value = "09/20/2010 14:30";

DateTime CompletedDttm = DateTime.ParseExact(value, "MM/dd/yyyy HH:mm",    
    new CultureInfo("en-US"));
DateTime FinalDttm = TimeZoneInfo.ConvertTime(CompletedDttm, 
    TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"), 
    TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time"));
string output = FinalDttm.ToString(new CultureInfo("en-GB"));

FinalDttm = TimeZoneInfo.ConvertTime(CompletedDttm, TimeZoneInfo.Local, 
    TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time"));
output = FinalDttm.ToString(new CultureInfo("de-DE"));
Run Code Online (Sandbox Code Playgroud)

输出依次为:

2010年9月20日 19:30:00

2010年9月20日 20:30:00