2010-07-01 55 views
3

爲了在搜索方法中使用,我想解析不同格式的部分日期。 我想讓用戶搜索日,月,月,年或者日,月,年。C# - 解析不同格式的部分日期

但更有問題的是,我想要在所有可能的日期格式,這取決於國家,用戶所在。這是一個ASP.NET頁面,我可以使用CultureInfo,因此也CultureInfo.DateTimeFormat。

你有什麼想法,該怎麼做?我認爲,英國人可以搜索16/05,而美國人可以進入05/16,或者德國人可以用16.05找到5月16日的結果,這是非常棒的。

我認爲可以使用DateTimeFormat.ShortDatePattern。但是,我怎麼能用它來獲取日,月和年呢?

我想使用像

public void GetDateParts(string SearchStr, out int? day, out int? month, out int? year) 

由於任何人誰可以幫助我與此有關。

+1

我認爲讓用戶從某個日期選擇器控件中選擇一個日期會更好。 – 2010-07-01 12:08:09

+1

你的問題更大。如果輸入是2/2,那是'2 feb'還是'feb 2002'?短期格式將無法提供幫助。 – 2010-07-01 12:15:53

+0

您不清楚您是否知道用戶的首選日期格式,或者您想從輸入字符串中推斷出它。如果你知道用戶的國籍(或偏好),那麼你知道這些數字的含義,你只需要解析它們。從輸入字符串推斷格式有點複雜... – Andy 2010-07-01 12:29:22

回答

1

就像你提到的大多數人一樣,我想我會選擇一個帶日期選擇器或下拉菜單的方法。 但對於那些誰有興趣在另一種解決方案:

我想了一會兒不同的格式,發現他們在大多數情況下非常相似。所以我寫了一個方法,返回更經常使用的模式的最佳匹配版本。所以'd.m.y.' - >'d.m.y'或'd/m y' - >'d/m/y'。

public static string SimplifyDateFormat(DateTimeFormatInfo DTFI) 
{ 
    StringBuilder SB = new StringBuilder(DTFI.ShortDatePattern.ToLower()); 

    SB.Replace("m y", "m/y").Replace(" 'г.'", "").Replace(" ", "").Replace("dd", "d") 
    .Replace("mm", "m").Replace("yyyy", "y").Replace("yy", "y"); 

    if (SB[SB.Length - 1] == '.') SB.Remove(SB.Length - 1, 1); 
    return SB.ToString(); 
} 

這減少了可能的格式的量從26到這些8:

  • d /月/
  • DMY
  • DMY
  • Y/M/d
  • ymd
  • ymd
  • 米/ d/Y
  • m.d.y

這些僅是3個不同的格式通過解析正則表達式如果使用[/.-]爲分隔符。

P.S.仍然沒有解決部分日期的問題。但可以搜索所有文化的完整日期。

0

您可以定義一些輸入格式,然後在表單中強制其中一個(基於用戶信息)。喜歡的東西:

「輸入日期(DD-MM):_ - _」 英國

「輸入日期(MM-DD):_ - _」 美國

等...