C# 在C中将类似java的日期字符串转换为DateTime#

C# 在C中将类似java的日期字符串转换为DateTime#,c#,datetime,C#,Datetime,我有以下格式的日期: 美国东部时间2012年3月13日星期二12:00:00 如何在C#net中将它们转换为DateTime?有。e、 g.对于“2009-05-08 14:40:52531”: 对于您的案例,格式应该是:“ddd MMM dd HH:mm:ss zzz yyyy”: 问题在于获取时区。K或zzz格式选项返回数字时差,例如+02:00,但您需要字母。可能的解决方案是创建将时间偏移转换为字母表示的辅助方法。不幸的是,我看不到任何其他合理的选择,使这件事的工作 var timeZon

我有以下格式的日期:

美国东部时间2012年3月13日星期二12:00:00

如何在C#net中将它们转换为DateTime?

有。e、 g.对于“2009-05-08 14:40:52531”:

对于您的案例,格式应该是:“ddd MMM dd HH:mm:ss zzz yyyy”:

问题在于获取时区。Kzzz格式选项返回数字时差,例如+02:00,但您需要字母。可能的解决方案是创建将时间偏移转换为字母表示的辅助方法。不幸的是,我看不到任何其他合理的选择,使这件事的工作

var timeZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern standard time");  
var formattedDate = "Tue Mar 13 12:00:00 EST 2012".Replace("EST",tzi.BaseUtcOffset.ToString());

您可以使用
TryParseExact

class Program
{
    static void Main(string[] args)
    {
        var dtString = "Tue Mar 13 12:00:00 EST 2012".ConvertTimeZone();
        DateTime dt;
        var success = DateTime.TryParseExact(
            dtString,
            "ddd MMM dd HH:mm:ss zzz yyyy",
            CultureInfo.InvariantCulture,
            DateTimeStyles.None,
            out dt);

        Console.WriteLine(success);
        if (Debugger.IsAttached) { Console.ReadKey(); }
    }
}

public static class Extensions
{
    private static Dictionary<string, string> _timeZones =
        new Dictionary<string, string> { { "EST", "-05:00" } };

    public static string ConvertTimeZone(this string s)
    {
        var tz = s.Substring(20, 3);
        return s.Replace(tz, _timeZones[tz]);
    }
}
类程序
{
静态void Main(字符串[]参数)
{
var dtString=“美国东部时间2012年3月13日星期二12:00:00”。ConvertTimeZone();
日期时间dt;
var success=DateTime.TryParseExact(
dtString,
“ddd-MMM-dd-HH:mm:ss-zzz-yyyy”,
CultureInfo.InvariantCulture,
DateTimeStyles。无,
输出dt);
Console.WriteLine(成功);
if(Debugger.IsAttached){Console.ReadKey();}
}
}
公共静态类扩展
{
专用静态字典\u时区=
新词典{“EST”,“-05:00”};
公共静态字符串转换时区(此字符串为s)
{
var tz=s.子串(20,3);
返回s.Replace(tz,_时区[tz]);
}
}
如果转换成功,
success
将为
true
dt
将具有日期和时间值


好的,让我们稍微谈谈这个。实际上,我不得不采取行动,并承诺实际将时区转换为偏移量。这是非常准确的,但需要一些维护。你唯一需要维护的就是
字典\u时区
。您需要添加所有要支持的时区。

我在
dateValue=“2012年3月13日星期二12:00:00 EST”中试用了它并且它不工作。@enb081,
13
是一个月的哪一天吗?是的,它实际上是一个月的哪一天。当我做
响应时。写(成功)
我得到
错误
@enb081,尝试用
zzz
代替
K
。@enb081,让我在本地构建一个小应用程序,我很快就会回来。我得到异常
字符串未被识别为有效日期时间。
仍然是相同的异常。
var timeZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern standard time");  
var formattedDate = "Tue Mar 13 12:00:00 EST 2012".Replace("EST",tzi.BaseUtcOffset.ToString());
class Program
{
    static void Main(string[] args)
    {
        var dtString = "Tue Mar 13 12:00:00 EST 2012".ConvertTimeZone();
        DateTime dt;
        var success = DateTime.TryParseExact(
            dtString,
            "ddd MMM dd HH:mm:ss zzz yyyy",
            CultureInfo.InvariantCulture,
            DateTimeStyles.None,
            out dt);

        Console.WriteLine(success);
        if (Debugger.IsAttached) { Console.ReadKey(); }
    }
}

public static class Extensions
{
    private static Dictionary<string, string> _timeZones =
        new Dictionary<string, string> { { "EST", "-05:00" } };

    public static string ConvertTimeZone(this string s)
    {
        var tz = s.Substring(20, 3);
        return s.Replace(tz, _timeZones[tz]);
    }
}