2012-11-14 24 views
0

在數據庫中保存的日期按以下格式在格式化:
year-month-day hour:minute:second:msecond變化DateTime.Parse()

在應用程序的用戶可以過濾格,並在過濾器列寫:
08-11 - 它的平均11月8日。 我有以下代碼:

var test = DateTime.Parse(filter.SearchingValue); 
test變量

包含11.08.2012。但是,我想獲得08.11.2012

+0

使用'ParseExact '並提供一種模式。 – CodesInChaos

+6

'11!= October' – Rawling

+5

在你的數據庫中,你應該使用'DATETIME'列來保存你的日期 - 如果你有一個_format_他們被保存,你做錯了。如果用戶寫下以下內容,請致電 – Oded

回答

0
var ftest = test.ToString("dd.MM.yyyy") 
1

您可以使用DateTime.ParseExact

string value = string.Format("{0}-{1}" 
    , filter.SearchingValue 
    , DateTime.Today.Year); 
DateTime dt = DateTime.ParseExact(value, "dd-MM-yyyy", CultureInfo.InvariantCulture); 

是的,而且用戶可以通過點裂棗:08.11。更多 檢查:08.11.12,08.11,08-11,08-11-12。

也許有什麼東西更容易,但這個工程:

// sample input 
var inputs = new string[] { "08.11.12", "08.11", "08-11", "08-11-12" }; 
// possible formats 
var formats = new string[] { "dd-MM-yyyy", "dd.MM.yyyy" }; 
// try to parse all your sample data 
for (int i = 0; i < inputs.Length; i++) 
{ 
    string input = inputs[i]; 
    var tokens = input.Split(new[] { '-', '.' }, StringSplitOptions.RemoveEmptyEntries); 
    if (tokens.Length == 2) 
    { 
     input = string.Format("{0}-{1}" 
       , input 
       , DateTime.Today.Year); 
    } 
    else if (tokens.Length == 3) 
    { 
     string year = tokens[2]; 
     if (year.Length != 4) 
     { 
      year = string.Format("{0:20##}", int.Parse(year)); 
     } 
     input = string.Format("{0}-{1}-{2}" 
       , tokens[0] 
       , tokens[1] 
       , year); 
    } 
    else 
     throw new ArgumentException("Invalid DateTime", "filter.SearchingValue"); 

    DateTime dt = DateTime.MinValue; 
    foreach (string format in formats) 
    { 
     bool success = DateTime.TryParseExact(
      input 
      , format 
      , CultureInfo.InvariantCulture 
      , DateTimeStyles.None 
      , out dt); 
     if (success) break; 
    } 
    Console.WriteLine(dt.ToString()); 
} 
+0

:08-11-2012。這只是過濾器行。 – user1260827

+0

@ user1260827:我不明白你最後的評論。如果用戶還可以輸入年份,則需要將字符串拆分爲多個部分(通過'String.Split(' - ')'),並檢查它是否包含一年。 –

+0

是的,但用戶也可以按點分割日期:'08.11'。更多示例:08.11.12,08.11,08-11,08-11-12。 – user1260827

0

你可以設置你的web配置默認的日期格式,在System.Web程序:

< globalization uiCulture="en-GB" culture="en-GB" />