【问题标题】:Convert string to datetime in any format以任何格式将字符串转换为日期时间
【发布时间】:2016-04-22 12:05:47
【问题描述】:

目标

想要将任何格式的日期时间转换为 de-DE 文化

示例日期时间

2016 年 3 月 30 日下午 2:38:20

2016 年 4 月 4 日上午 11:08:10

我尝试了什么

protected void Page_Load(object sender, EventArgs e)
{
    string dt1Valid = CheckDateFormat("3/30/2016 2:38:20 PM");
}

public string CheckDateFormat(string checkDate)
{
    string formats1 = getFormat(checkDate);

    DateTime parsedDateTime;
    DateTimeFormatInfo ukDtfi = new CultureInfo("de-DE", false).DateTimeFormat;
    if (!DateTime.TryParseExact(checkDate, formats1, new CultureInfo("de-DE"),
                                   DateTimeStyles.None, out parsedDateTime))
    {
        return Convert.ToDateTime(parsedDateTime.ToString()).ToString(ukDtfi.ShortDatePattern + " " + ukDtfi.LongTimePattern);

    }
    else
        return "";
}
public string getFormat(string checkDate)
{
    string[] formats = {"M/d/yyyy", "MM/dd/yyyy",                                    
                    "d/M/yyyy", "dd/MM/yyyy", 
                    "yyyy/M/d", "yyyy/MM/dd",
                    "M-d-yyyy", "MM-dd-yyyy",                                    
                    "d-M-yyyy", "dd-MM-yyyy", 
                    "yyyy-M-d", "yyyy-MM-dd",
                    "M.d.yyyy", "MM.dd.yyyy",                                    
                    "d.M.yyyy", "dd.MM.yyyy", 
                    "yyyy.M.d", "yyyy.MM.dd",
                    "M,d,yyyy", "MM,dd,yyyy",                                    
                    "d,M,yyyy", "dd,MM,yyyy", 
                    "yyyy,M,d", "yyyy,MM,dd",
                    "M d yyyy", "MM dd yyyy",                                    
                    "d M yyyy", "dd MM yyyy", 
                    "yyyy M d", "yyyy MM dd",

                    "M/d/yyyy hh:mm:ss tt", "MM/dd/yyyy hh:mm:ss tt",                                    
                    "d/M/yyyy hh:mm:ss tt", "dd/MM/yyyy hh:mm:ss tt", 
                    "yyyy/M/d hh:mm:ss tt", "yyyy/MM/dd hh:mm:ss tt",
                    "M-d-yyyy hh:mm:ss tt", "MM-dd-yyyy hh:mm:ss tt",                                    
                    "d-M-yyyy hh:mm:ss tt", "dd-MM-yyyy hh:mm:ss tt", 
                    "yyyy-M-d hh:mm:ss tt", "yyyy-MM-dd hh:mm:ss tt",
                    "M.d.yyyy hh:mm:ss tt", "MM.dd.yyyy hh:mm:ss tt",                                    
                    "d.M.yyyy hh:mm:ss tt", "dd.MM.yyyy hh:mm:ss tt", 
                    "yyyy.M.d hh:mm:ss tt", "yyyy.MM.dd hh:mm:ss tt",
                    "M,d,yyyy hh:mm:ss tt", "MM,dd,yyyy hh:mm:ss tt",                                    
                    "d,M,yyyy hh:mm:ss tt", "dd,MM,yyyy hh:mm:ss tt", 
                    "yyyy,M,d hh:mm:ss tt", "yyyy,MM,dd hh:mm:ss tt",
                    "M d yyyy hh:mm:ss tt", "MM dd yyyy hh:mm:ss tt",                                    
                    "d M yyyy hh:mm:ss tt", "dd MM yyyy hh:mm:ss tt", 
                    "yyyy M d hh:mm:ss tt", "yyyy MM dd hh:mm:ss tt"

                   };

    DateTime dateValue;

    foreach (string dateStringFormat in formats)
    {
        if (DateTime.TryParseExact(checkDate, dateStringFormat,
                                   CultureInfo.InvariantCulture,
                                   DateTimeStyles.None,
                                   out dateValue))
            //Console.WriteLine("Converted '{0}' to {1}.", dateStringFormat, dateValue.ToString("yyyy-MM-dd"));                
            return dateStringFormat;
    }
    return null;
}

我期望的结果

30.03.2016 14:38:20
04.04.2016 11:08:10

我得到的结果

01.01.0001 00:00:00
01.01.0001 00:00:00

【问题讨论】:

  • 请检查您的parsedDateTime 是否已设置。换句话说,解析不起作用,因此您最终会得到默认的日期时间值
  • @Marshal 问题出在我的 getFormat 方法上,它总是返回 null

标签: c# datetime datetime-format cultureinfo


【解决方案1】:

这很容易回答:不可能,所以不要再尝试了。

证明:任何格式包括M.d.yyyyd.M.yyyy。在这种情况下,1.2.2016 可以代表任一

  • 二月一日或
  • 一月二日。

结论:不可能从任何格式进行翻译,因为在没有其他信息的情况下,无法解析模棱两可的日期。

注意:这与 C# 或您选择的技术无关。你的要求被打破了。修复它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-10
    • 1970-01-01
    • 2018-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    相关资源
    最近更新 更多