2009-11-06 23 views
1

好吧,我不太清楚如何去做這件事。這是場景。將日期的部分手工放在一起

1)在網頁表單,我們有3個下拉菜單:月,日和年

2)年始終是可選的(不需要)

3)如果客戶輸入月份和日期,而不是年份,我們要將默認年份設置爲1900年

4)如果客戶確實輸入了全部3個,我需要拼湊一個DateTime到repr沒有那個。無論哪種方式,年份都會有一些......有效年份或1900年,如果用戶沒有選擇年份。

所以在我的代碼隱藏中,我不太清楚如何設置所有這些。最終,我需要形成該日期,以便在將日期發送給我的DL更新功能後,我可以更新SQL 2008 Date數據類型。

因此,我在我的代碼隱藏方法中創建了一個DataTime變量,該變量提取用戶在每個下拉列表中選擇的值。不過,我猜DateTime.Year上沒有setter,所以第四個。所以我不能只做DateTime.year =「1900」或者其他的事情。

+0

我忘了補充一點,生日本身是可選的。也就是說,如果他們沒有輸入3個字段中的任何一個,那麼我需要填寫1900年的日期時間,但是月份和日期呢?我可以在那裏爲SQL Server提供哪種默認值? – PositiveGuy 2009-11-06 14:15:02

回答

8

你說得沒錯,但是這些都可以在constructor中設置。你可能會做類似

DateTime date = new DateTime(year.HasValue ? year.Value : 1900, month, day) 

哪裏年是Int32?

+0

我認爲你需要將它改爲'year.HasValue? year.Value:1900',自year.Value返回一個int,並且您不能對整數('year.Value ??')執行'null'檢查。 – 2009-11-06 14:18:04

+0

感謝不知道我可以通過構造 – PositiveGuy 2009-11-06 14:21:14

+0

看起來像'今年設置? 1900'也可以工作。 – 2009-11-06 14:22:14

2
  1. 閱讀所有三塊從網頁信息(年,月,日)轉換成int變量
  2. 替代 「年」 與1900,如果空
  3. 創建新的datetime:

    DateTime myDate = new DateTime(year, month, day) 
    

這就是所有這些,我想。

-1

連接爲一個字符串,然後轉換爲日期時間。

+1

**壞壞壞**主意!你是否正確處理所有不同的國際日期格式?您的應用會在例如法國?日本? – 2009-11-06 14:11:00

+1

同意這不是要走的路......根本不需要,容易出錯 – 2009-11-06 14:19:18

+0

真的,你做了多少國際工作?(b)ToDateTime(String,IFormatProvider)有什麼問題 哪個(來自MSDN)使用指定的區域性將指定的數字字符串表示形式轉換爲等效的日期和時間() 特定的格式信息。 – BIDeveloper 2009-11-06 14:35:43

0

有一個DateTime構造函數需要一年,一個月和一天,因爲它是輸入參數。您可以使用該值並從您的下拉列表中輸入值(如果未選擇年份,則默認爲1900)。

0

這也是事實可能改變DateTime的年構建之後,雖然它是較爲費力:

int yearsSinceNineteenHundred = date.Year - 1900; 
date = date.AddYears(-yearsSinceNineteenHundred);