TryParseExact方法如何在多格式数组中工作

时间:2016-03-30 06:51:25

标签: c# sql excel

我对thetryparseexact方法的工作原理有疑问。

因为我需要将excel数据上传到sql serever。我需要从excel转换sql中的datetime列。但我在EXCEL中没有标准格式列。所以使用tryparse exact。但它如何区分  正常字符串中的dd和mm,例如:10/01/2016如何将其区分为dd / mm / yyyy或mm / dd / yyyy。

我使用以下链接作为参考

Reference Link

预先感谢您的回答。

1 个答案:

答案 0 :(得分:1)

我建议投票两种可能的格式,然后分析投票:

  // collect all the datetime values in the Excel sheet(s)
  String[] data = new String[] { "01/02/2000", "25/08/2007", "09/10/2010" };
  DateTime dt;

  // then analyze them:
  int votesForDayMonth = data
    .Count(item => DateTime.TryParseExact(item, 
                                          "dd/MM/yyyy", 
                                          CultureInfo.InvariantCulture, 
                                          DateTimeStyles.AssumeLocal, 
                                          out dt));

  int votesForMonthDay = data
    .Count(item => DateTime.TryParseExact(item, 
                                          "MM/dd/yyyy", 
                                          CultureInfo.InvariantCulture,
                                          DateTimeStyles.AssumeLocal, 
                                          out dt));

  if (votesForDayMonth == votesForMonthDay) {
    // Ambiguity, unlucky you
  }
  else if (votesForDayMonth >= data.Length) {
    // dd/MM/yyyy order: all data can be parsed as dd/MM/yyyy but not as MM/dd/yyyy
  }
  else if (votesForMonthDay >= data.Length) {
    // MM/dd/yyyy order: all data can be parsed as MM/dd/yyyy but not as dd/MM/yyyy
  }
  else if (votesForDayMonth > votesForMonthDay) {
    // probably dd/MM/yyyy order
  }
  else {
    // probably MM/dd/yyyy order
  }

实际案例中,当您拥有足够的清晰数据时,您可以找到该格式。在上面的代码中,它是"dd/MM/yyyy order"