我有一个包含日期&的字符串某种形式的时间。例如:
13:53:56 20.08.2014
此字符串是从用户上传到我的服务的文件中解析的。确切日期&时间格式未知。它几乎可以改变任何日期和时间。你知道的时间格式。我没有预期格式或类似的列表。
我想开发一种算法,以某种方式从初始字符串中提取格式并将其应用于DateTime.Now
。
有没有办法简单而优雅地做到这一点?
答案 0 :(得分:2)
如果您知道预期格式列表,请定义它们并使用DateTime.TryParseExact()
找出输入字符串的匹配格式。获得匹配格式后,您只需使用匹配格式DateTime.Now.ToString(format)
。
答案 1 :(得分:2)
如果这是一个Web应用程序,也许你可以"欺骗一下"通过在输入字符串之前嗅探用户的区域设置。
MSDN文章" How to: Display Localized Date and Time Information to Web Users"有用的信息。
答案 2 :(得分:1)
受到Mani的好建议的启发,我已根据自己的需求创建了以下扩展方法:
public static bool TryFormatLike(this DateTime dateTime, string another, out string result)
{
var allCultures = CultureInfo.GetCultures(CultureTypes.AllCultures | CultureTypes.UserCustomCulture | CultureTypes.ReplacementCultures);
foreach (var culture in allCultures)
{
var allPatterns = culture.DateTimeFormat.GetAllDateTimePatterns();
foreach (var pattern in allPatterns)
{
DateTime parsedAnother;
if (DateTime.TryParseExact(another, pattern, culture.DateTimeFormat, DateTimeStyles.AllowWhiteSpaces, out parsedAnother))
{
result = dateTime.ToString(pattern);
return true;
}
}
}
result = string.Empty;
return false;
}
你可以这样使用它:
string formattedNow;
if (DateTime.Now.TryFormatLike("13.02.2015 16:14:43", out formattedNow))
{
Console.WriteLine(formattedNow);
}
这将打印
10.03.2015 23:37:08
不幸的是,有些日期&所有文化中的所有模式都无法解析时间格式(例如,字符串16:14:43 13.02.2015
将不会被解析)。
无论如何,谢谢你的评论&答案。也许这种方法对某人有帮助。