我的日期格式如下:
2012年3月13日星期二中午12点00分
如何在C#.net?
中将它们转换为DateTime答案 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
将为true
,dt
将包含日期和时间值。
好的,让我们谈谈这个。实际上我不得不进行潜水并承诺将时区实际转换为偏移量。这非常准确,但需要一些维护。您唯一需要维护的是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());