2013-03-27 77 views
3

任何人都可以看到我做錯了什麼,我試圖解析日期,以確保其有效的日期,如果這樣將其轉換爲我需要的格式。DateTime.TryParseExact CultureInfo.InvariantCulture

我已經嘗試過不同的方式做到這一點,但都返回01/01/0001 00:00:00。串parseArrivalDate

值= 02/02/2013

DateTime ukDateFormat; 
string ukFormat = "0:ddd, MMM d, yyyy";  
DateTime.TryParseExact(parseArrivalDate, ukFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out ukDateFormat);  
DateTime test = ukDateFormat; 

--------------------------------- ----編輯-------------------------------

好的,對不起,我沒有很好地解釋它。如果我輸入英國格式說27/02/2013,當我有英國格式爲dd/MM/yyyy它工作正常,問題是當我進入美國或任何其他格式,它是返回不正確的日期,所以我是改變格式輪認爲是問題。

現在,在閱讀您的意見之後,我已經明白了我的英文格式第一次是正確的,所以我的問題是,如何更改代碼,以便可以正確解析任何日期格式。

希望更有意義 感謝

+1

TryParse的結果是什麼?如果只傳遞parseArrivalDate和ukFormat,它將如何工作? – 2013-03-27 12:36:46

回答

1

您的日期字符串是:02/02/2013和你正在使用的格式是"0:ddd, MMM d, yyyy"這是不對的,應該是MM/dd/yyyy如果每月第一。

DateTime ukDateFormat; 
string ukFormat = "MM/dd/yyyy";  
DateTime.TryParseExact(parseArrivalDate, ukFormat,CultureInfo.InvariantCulture,DateTimeStyles.None, out ukDateFormat);  
DateTime test = ukDateFormat; 

如果您所指定的日期包含當天第一則一個月,然後用格式"dd/MM/yyyy",順便問一下,你可以使用單dM爲單位和兩位數日/月。

目前您正在獲取DateTime.MinValue,因爲解析由於格式無效而失敗。

+0

嗨編輯問題 – CareerChange 2013-03-27 12:58:27

1

我不知道你的期望,但你的輸入字符串不符合你的ukFormat模式!所以這是完全正確的行爲。

改變你的模式""dd/MM/yyyy""使TryParseExact工作。

+0

嗨編輯問題 – CareerChange 2013-03-27 12:57:41

1

您提供的格式看起來有點奇怪。嘗試用此替換它

string ukFormat = "dd/MM/yyyy";  

並閱讀documentation對此。

+1

嗨編輯問題 – CareerChange 2013-03-27 12:58:55

4

你的字符串

"0:ddd, MMM d, yyyy" 

擁有一批0,冒號:,以及對應於

"Wed, Mar 27, 2013" 

的格式。例如,如果文化是"en-GB"( 「英語(英國)」 )。它可能來自一個String.FormatConsole.WriteLine或類似的方法調用,它被放入括號{}格式化文本,如

Console.WriteLine("The date {0:ddd, MMM d, yyyy} was selected.", someDateTime); 

它將使用代碼,如:

string arrivalDateString = "Wed, Mar 27, 2013"; 

... 

DateTime result; 
string yourFormat = "ddd, MMM d, yyyy"; // no "0:" part 
bool isOK = DateTime.TryParseExact(arrivalDateString, yourFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out result);  
if (isOK) 
{ 
    // Worked! Answer is in 'result' variable 
} 
else 
{ 
    // Didn't work! 'result' variable holds midnight 1 January 0001 
} 

"27/03/2013"對應的格式爲"dd/MM/yyyy"(或"d/M/yyyy")。對應於"03/27/2013"的格式爲"MM/dd/yyyy"(或"M/d/yyyy")。

它是不可能有一個處理兩種風格日期的一種方法,因爲像

"01/04/2013" /* ambiguous */ 

字符串的意思可以

  • 1 2013年4月
  • 2013年1月4日

所以它是模棱兩可的,我們不可能知道日期是什麼意思。另見Wikipedia: Calendar date → Date format

0

謝謝大家幫助我瞭解我哪裏出錯了,下面的代碼是我想出來的,雖然不完美,因爲03/06/2013英國與03/06/2013美國的含義不同。

我在文本框上方添加了要求人們使用格式dd/mm/yyyy的文本。

string getArrivalDate = ArrivalDate; 
        string getDepartureDate = DepartureDate; 

        string dteFormat  = "dd/MM/yyyy"; 
        DateTime result; 
        string arrivalDateParse; 
        string departureDateParse; 

        bool arrival = DateTime.TryParseExact(getArrivalDate, dteFormat, new CultureInfo("en-GB"), DateTimeStyles.None, out result); 
        if (arrival) 
         { 
         arrivalDateParse = getArrivalDate; 
         } 
        else 
         { 
         arrivalDateParse = "notvalid"; 
         } 

        bool depart = DateTime.TryParseExact(getDepartureDate, dteFormat, new CultureInfo("en-GB"), DateTimeStyles.None, out result); 
        if (depart) 
         { 
         departureDateParse = getDepartureDate; 
         } 
        else 
         { 
         departureDateParse = "notvalid"; 
         } 

        if (arrivalDateParse == "notvalid" || departureDateParse == "notvalid") 
         { 
         if (Request.IsAjaxRequest()) 
          { 
          return Json(new { Confirm = "Date not in correct format" }, JsonRequestBehavior.AllowGet); 
          } 
         else 
          { 
          TempData["Error"] = "Sorry your arrival date or departure date is not a valid format, please enter date as dd/mm/yyyy example 02/12/2013"; 

          return View("~/Views/Shared/Error.cshtml"); 
          } 

如果任何人都可以改進代碼,這將不勝感激。

感謝

喬治

相關問題