將時間字符串格式化成DateTime的有趣事情


  最近老大要我將一個dateCalendar控件換成jQuery的datePicker控件,換了之后需要修改cs代碼,我在格式化時間的時候遇到了很有趣的事情,就是,我無論用什么樣的方式格式化字符串,它都會添加一個“星期幾”進去,例如它會將“2012-08-11 8: 0:00"轉換成“2012-08-11 星期六 8: 0:00”。最后這個問題解決了,照成問題的原因有點讓我苦笑不得。現在不說照成問題的原因,先說說我在找到原因之前學到的幾種格式化時間字符串的方法:

  第一種,當然是Convert這個無敵的方法了,這個里面有個方法ToDateTime(string dateTime)。

string dateTime = "2012-08-11 10:11";
Console.WriteLine(Convert.ToDateTime(dateTime));

  運行結果:

  第二種就是TryParseExact方法,下面是方法介紹(http://msdn.microsoft.com/zh-cn/library/ms131044.aspx):

public static bool TryParseExact(
      string s,//要格式化的字符串
      string format,//格式化的類型
      IFormatProvider provider,//提供"s"的區域性特定格式信息
      DateTimeStyles style,//時間樣式
      out DateTime result//輸出值
)

  例子:

DateTime output1;
DateTime.TryParseExact("2012-08-11", "yyyy/MM/dd", null, DateTimeStyles.None, out output1);
Console.WriteLine(output1.ToString());
Console.WriteLine("");
Console.WriteLine("");

string dataTime = "2012-08-11 10:01:00";
DateTimeFormatInfo dtFormat = new CultureInfo("en", true).DateTimeFormat;
string[] expectFormats = { "yyyy-MM-dd HH:mm:ss" };
DateTime output;
DateTime.TryParseExact(dataTime, 
                expectFormats,
                null, 
                DateTimeStyles.AdjustToUniversal, 
                out output);
Console.WriteLine(output.ToString());

結果(第一個顯示不是預期的):

  第三種方式是ParseExact方法,下面是方法介紹(http://msdn.microsoft.com/zh-cn/library/w2sa9yss(v=VS.80).aspx):

public static DateTime ParseExact (
    string s,//包含要轉換的日期和時間的字符串。
    string format,//s 的預期格式。
    IFormatProvider provider//用於提供有關 s 的區域性特定格式信息。
)

  例子:

            string temp1 = "2012-08-11";
            DateTime dateTemp1 = DateTime.ParseExact(temp1, "yyyy-MM-dd", CultureInfo.CurrentCulture, DateTimeStyles.None);
            Console.WriteLine(dateTemp1.ToString());
            Console.WriteLine("");
            Console.WriteLine("");

            string temp2 = "2012-08-11";
            DateTimeFormatInfo dtfi = new CultureInfo("zh-CN", false).DateTimeFormat; 
            DateTime dateTemp3 =  DateTime.ParseExact(temp2, "yyyy-MM-dd", dtfi, DateTimeStyles.None) ;
            Console.WriteLine(dateTemp3.ToString());
            Console.WriteLine("");
            Console.WriteLine("");

            string[] DateTimeList = {
            "yyyy-MM-dd HH:mm:ss",
            "yyyy-M-d HH:mm:ss",
            "yyyy-M-d H:mm:ss",
            "yyyy-M-d H:m:ss",
            "yyyy-M-d HH:mm:ss",
            "yyyy-M-d HH:m:ss",
            };
            DateTimeFormatInfo dtFormat1 = new CultureInfo("en-US", true).DateTimeFormat;
            DateTime dt = DateTime.ParseExact("2012-08-11 8: 0:00",
                DateTimeList,
                dtFormat1,
                DateTimeStyles.AllowWhiteSpaces
            );
            Console.WriteLine(dt.ToString());

  結果如下:

 

  以上的結果是沒有星期幾的,我現在上圖


這是我在修改之前的輸出結果,不論使用什么方法都會輸出星期六,及時我想語言特定為“en”,"en-US"等等,

后來我發現是因為我自己將WIN7系統的時間格式修改了,手動添加了表示星期幾的"dddd",

我在將"dddd"去掉后,顯示就正常了,如下:

 

【注】:目前我沒找到一種將字符串轉化成DateTime的時候與系統時間格式完全無關的方法,希望知道的可以多多指教,謝謝了!

推薦文章:http://www.cnblogs.com/jxfc2002/articles/885413.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM