1.使用convert.todatetime()方法,用法如下:
string str = "2017-08-10";
datetime dt= convert.todatetime(str);
不過convert.todatetime()方法,只能解釋系統能識別的格式的字串,如:
2017-08-10 08/10/2017 2017/08/10,
如果是其他格式的字串,如:20101212 是無法轉換的
2.使用datetime.parse()方法
trycatch(formatexception fe)
messagebox.show(fe.message);
datetime dt;if (datetime.tryparse("20170810", outdt))
messagebox.show(dt.tostring("yyyy-mm-dd"));
}elsecatch(formatexception fe)
messagebox.show(fe.message);
注意:parseexact()方法,必須指定將要解釋的字串日期的格式,如上述的"yyyymmdd"。
和parse()對應的tryparse()一樣,parseexact()也有tryparseexact()方法,而且作用也是一樣
yyyy/mm/dd和yyyy/m/d的區別:
yyyy/mm/dd 只能匹配 2017/12/01這種格式,2017/12/1則無法解釋;要求更嚴格
yyyy/m/d 則技能匹配 2017/12/12,2017/12/01,也能匹配2017/12/1;匹配範圍更大,當月和日不足兩位時,既可以帶0也可以不帶
由於最終處理日期使用的是system.globalization.calendar類,所以不僅要格式滿足,還需要是有效的日期,如:2017/99/99就是無效的
4.通過reflector檢視.net的源**:
parse()和parseexact()方法都有3個過載,繼續深入:
前面兩個parse()方法,底層都是直接呼叫有3個引數的parse(),而這個parse()方法的底層又去呼叫了tryparse():
同理 parseexact()方法的底層原理一樣
所以不管呼叫parse()是tryparse(),底層的處理是一樣的。
5.日期轉換會與區域相關,所以需要考慮cultureinfo
cultureinfo類提供特定區域的書寫系統,日曆、字串、日期和數字的格式化,所以使用不同的cultureinfo輸出的結果可能會不一樣
例如,在全球各地都有客戶端,而伺服器在美國,每一台客戶端傳送回伺服器的日期如果不做任何處理的話,則會出現各種各樣格式的日期,
所以為了不受區域的影響,可以使用 cultureinfo.invariantculture 屬性 (---- invariant 不變的)
注意:cultureinfo.invariantculture關聯的是英語語言,但與國家區域無關;
以上說的todatetime()、parse()、tryparse()、parseexact()、tryparseexact()都能接受乙個cultureinfo型別的引數,
所以只要設定了cultureinfo.invariantculture,即使通過控制面板修改日期和時間的格式,都不會影響到轉換的結果
對應的**如下:
todatetime():
string str = "2017-08-10";
datetime dt= convert.todatetime(str, cultureinfo.invariantculture);
parse():
datetime dt = datetime.parse("2017-08-10", cultureinfo.invariantculture);
tryparse():
if (datetime.tryparse("20170810", cultureinfo.invariantculture, datetimestyles.none, outdt))
parseexact():
datetime dt = datetime.parseexact("20170810", "yyyymmdd", cultureinfo.invariantculture);
tryparseexact():
if (datetime.tryparseexact("20170810", "yyyymmdd", cultureinfo.invariantculture, datetimestyles.none, outdt))
6.總結
如果是將標準的字串轉化為datetime,直接使用convert.todatetime() 或者 datetime.parse()即可;
如果是將比較奇怪格式的字串轉換為datetime,或者只執行某種格式的字串時,就是用datetime.parseexact 和 datetime.tryparseexact();
如果不想****現try--catch塊的,就使用tryparse()或tryparseexact().
如果需要不受區域影響,則加上cultureinfo.invariantculture。
C裡面怎麼把字串轉成數字
字串 123 轉成數字123 怎麼轉?atof 將字串轉換成浮點型數 相關函式 atoi,atol,strtod,strtol,strtoul 表頭檔案 include 定義函式 double atof const char nptr 函式說明 atof 會掃瞄引數nptr字串,跳過前面的空格字元,...
將數字字串轉換為數字
將數字字串轉換為數字的方法有多種,c中有atoi,atof,sscanf函式可用,這些函式的用法可以在msdn里查到,這裡就不在多說了,現在說一種通用的轉換的方法 template bool str2value const std string str,type value,std ios base...
mysql將字串轉成數字
今天寫sql語句時,相對字串型別的數字進行排序,怎麼做呢?需要先轉換成數字再進行排序 1.直接用加法 字串 0 eg select from orders order by mark 0 desc 2.使用函式 cast value as type convert value,type 注 這裡的t...