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

时间:2013-12-18 14:17:36

标签: c# datetime

我的日期格式如下:

  

2012年3月13日星期二中午12点00分

如何在C#.net?

中将它们转换为DateTime

2 个答案:

答案 0 :(得分:3)

您可以使用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]);
    }
}

如果转化成功,success将为truedt将包含日期和时间值。

好的,让我们谈谈这个。实际上我不得不进行潜水并承诺将时区实际转换为偏移量。这非常准确,但需要一些维护。您唯一需要维护的是Dictionary<string, string> _timeZones。您需要添加要支持的所有时区。

答案 1 :(得分:0)

DateTime.ParseExact。例如为“2009-05-08 14:40:52,531”:

DateTime date = DateTime.ParseExact(
                   "2009-05-08 14:40:52,531", 
                   "yyyy-MM-dd HH:mm:ss,fff", 
                    System.Globalization.CultureInfo.InvariantCulture);

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

DateTime date = DateTime.ParseExact(
                   "Tue Mar 13 12:00:00 EST 2012", 
                   "ddd MMM dd HH:mm:ss zzz yyyy", 
                    System.Globalization.CultureInfo.InvariantCulture);

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

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