找出在C#中的字符串日期的日期时间格式(Find out the Date time format

2019-07-04 01:49发布

我提出申请。 该应用程序使用的日期格式,如"2012-11-21 15:22:35"
我已经知道,格式为"yyyy-MM-dd HH:mm:ss" 但我怎么能找到程序的任意输入字符串的日期和时间格式? 有没有办法做到这一点?

Answer 1:

这可以帮助你..(数组中,增加更多的格式来检查)

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"
                           };

        DateTime dateValue;

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


Answer 2:

我想你会碰到与日期字符串的问题在一个月值<= 12,这意味着该字符串的格式可能是"yyyy-MM-dd""yyyy-dd-MM"

有没有办法知道哪一个是正确的,除非你把偏好解析器。

例如: 2012/08/07 - “这会是七月或八月?”

你可能只是蛮力,并希望有一个匹配的CultureInfo格式

 var datestring = "2012-10-05 12:00:03";
 DateTime time;
 var matchingCulture = CultureInfo.GetCultures(CultureTypes.AllCultures).FirstOrDefault(ci => DateTime.TryParse(datestring, ci, DateTimeStyles.None, out time))


Answer 3:

如果你想认识的格式,几乎没有办法100%的把握做到这一点。 但是,您可能想通过给出所支持的所有格式CultureInfoTryParse他们。 不幸的是,这可能会产生不正确的结果,因为没有告诉什么是年,月,日的东西这样的方式:

10/11/12

根据您的文化偏见,你可以把它解释为2012年10月11日; 2012年11月10日或2010年11月12日。

您还没有提到要与日期做什么,所以我会给你只是普通的最佳做法:

  1. 如果您想转移应用程序的不同模块之间的日期,用不变的日期格式。
  2. 如果您需要格式化的日期和时间,请使用默认的日期格式为特定的文化。
  3. 谈到默认的日期格式,如果你想接受最终用户输入的日期,你可能要解析自由形式的输入在文化的默认格式,或者您可以创建(或使用已有的)日期,时间选择器控件。 后一种方法是优选的。

广告1.要转换为不变的日期和时间格式使用:

DateTime now = DateTime.UtcNow;
string formatted = now.ToUniversalTime.ToString(CultureInfo.InvariantCulture);

或(转换为ISO8601样格式):

string formatted = now.ToString("u");

像明智的,你可以从不变的格式解析日期时间:

DateTime result;
string source = "11/20/2012 11:22:33";
if (DateTime.TryParse(source, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out result))
{
  // do something with result
}

或(通用格式,无需CultureInfo的):

DateTime result;
string source = "2012-11-20 11:22:33Z";
if (DateTime.TryParse(source, out result))
{
  // do something
}

广告2:3格式和分析特定的文化相似,格式化和解析日期不变,但你需要有一个检测,特定的实例来代替InvariantCulture的,说CultureInfo.CurrentCulture

根据应用程序的类型,您可能需要使用专用的日历控件,即jQuery UI的日期选择器 。



Answer 4:

使用下面的代码:

串sysFormat = CultureInfo.CurrentCulture.DateTimeFormat;



文章来源: Find out the Date time format of string date in c#