2014-01-20 157 views
0

我從javascript獲取日期字符串並將其轉換爲日期時間並將其保存到數據庫。在美國服務器中給出例外的日期

但在印度服務器我的代碼工作正常。但是當我將我的代碼上傳到美國的服務器時,它給出了例外。有沒有什麼常用的方法可以讓我的代碼可以運行到所有的服務器上。

我的代碼是像下面

[WebMethod(EnableSession = true)] 
public static bool submitDate(string date) // format is dd-mm-yyyy 20-01-2011 
{ 
    DateTime DOBdate = DateTime.Now; 
    double age = 0.0; 

    if (DateTime.TryParse(date , out DOBdate)) 
    { 
      age = (DateTime.Now - DOBdate).Days/365; 
    } 

     dbcmd.Parameters.Add("@DateOfBirth", SqlDbType.DateTime).Value = Convert.ToDateTime(DOBdate); 
} 

請幫助我。

顯示的異常是 SqlDateTime溢出。必須介於1/1/1753 12:00:00 AM和12/31/9999 11:59:59 PM之間。

+1

爲什麼您的字符串處於區域模糊格式?試試'yyyymmdd'。或者首先使用日期,而不是字符串。你是否讓人們手動輸入這些東西?爲什麼? –

+0

我正在使用datepicker選擇日期並將其發送到該函數中的服務器。 –

+3

那麼爲什麼你的datepicker傳遞格式爲dd-mm-yyyy的字符串呢?這顯然不會在美國服務器上運行,這是預計mm-dd-yyyy。沒有20個月,因此溢出。幸運的是,這並沒有在10日發生,在這種情況下,您將只保存非常不正確的數據,而且完全沒有錯誤。 –

回答

2

你應該使用TryParseExact,我猜服務器的默認日期時間格式不是dd-mm-yyyy。你應該如果解析功能的處理:

public static bool submitDate(string date) // format is dd-mm-yyyy 20-01-2011 
{ 
    DateTime DOBdate = DateTime.Now; 
    double age = 0.0; 

    if (DateTime.TryParseExact(date , {"dd-MM-yyyy"}, 
          null, 
          DateTimeStyles.None, 
          out DOBdate)) 
    { 
     age = (DateTime.Now - DOBdate).Days/365; 
    } 
    else 
    { 
     // Handle this case! 
    } 

    dbcmd.Parameters.Add("@DateOfBirth", SqlDbType.DateTime).Value = Convert.ToDateTime(DOBdate); 
} 

BTW你的年齡功能年齡不大的真的很好的跡象。你年紀越大,得到的錯誤就越多。

+0

「得到的錯誤越多」是「它」指的是人還是功能?兩者都可能在我的經驗中有效。 – StingyJack

+0

好笑。 但是,如果你沒有考慮閏年,你最終會得到錯誤的年齡(幾天之內,但你可能會在出生日期臨界)。 – MightyLampshade

+0

謝謝@peer。這就像一個冠軍.. :)感謝很多.. –

相關問題