2015年7月6日 星期一

[C#] DateTime 日期轉換格式, 時間計算, 日期天數計算

using System;
使用函式 DateTime dt = DateTime.Now;


DateTime 格式轉換方法
方法
結果
dt.ToString();
2005-11-5 13:21:25
dt.ToFileTime().ToString();
127756416859912816
dt.ToFileTimeUtc().ToString();
127756704859912816
dt.ToLocalTime().ToString();
2005-11-5 21:21:25
dt.ToLongDateString().ToString();
2005115
dt.ToLongTimeString().ToString();
13:21:25
dt.ToOADate().ToString();
38661.5565508218
dt.ToShortDateString().ToString();
2005-11-5
dt.ToShortTimeString().ToString();//
13:21
dt.ToUniversalTime().ToString();//
2005-11-5 5:21:25
dt.Year.ToString();//
2005
dt.Date.ToString();//
2005-11-5 0:00:00
t.DayOfWeek.ToString();
dSaturday
dt.DayOfYear.ToString();
309
dt.Hour.ToString();
13
dt.Millisecond.ToString();
441
dt.Minute.ToString();
30
dt.Month.ToString();
11
dt.Second.ToString();
28
dt.Ticks.ToString();
632667942284412864
dt.TimeOfDay.ToString();
13:30:28.4412864
dt.ToString();
2005-11-5 13:47:04
dt.AddYears(1).ToString();
2006-11-5 13:47:04
dt.AddDays(1.1).ToString();
2005-11-6 16:11:04
dt.AddHours(1.1).ToString();
2005-11-5 14:53:04
dt.AddMilliseconds(1.1).ToString();
2005-11-5 13:47:04
dt.AddMonths(1).ToString();
2005-12-5 13:47:04
dt.AddSeconds(1.1).ToString();
2005-11-5 13:47:05
dt.AddMinutes(1.1).ToString();
2005-11-5 13:48:10
dt.AddTicks(1000).ToString();
2005-11-5 13:47:04
dt.CompareTo(dt).ToString();
0
dt.Add(?).ToString();
問號為一個時間段
dt.Equals("2005-11-6 16:11:04").ToString();
False
dt.Equals(dt).ToString();
True
dt.GetHashCode().ToString();
1474088234
dt.GetType().ToString();
System.DateTime
dt.GetTypeCode().ToString();
DateTime
dt.GetDateTimeFormats('s')[0].ToString();
2005-11-05T14:06:25
dt.GetDateTimeFormats('t')[0].ToString();
14:06
dt.GetDateTimeFormats('y')[0].ToString();
200511
dt.GetDateTimeFormats('D')[0].ToString();
2005115
dt.GetDateTimeFormats('D')[1].ToString();
2005 11 05
dt.GetDateTimeFormats('D')[2].ToString();
星期六 2005 11 05
dt.GetDateTimeFormats('D')[3].ToString();
星期六 2005115
dt.GetDateTimeFormats('M')[0].ToString();
115
dt.GetDateTimeFormats('f')[0].ToString();
2005115 14:06
dt.GetDateTimeFormats('g')[0].ToString();
2005-11-5 14:06
dt.GetDateTimeFormats('r')[0].ToString();
Sat, 05 Nov 2005 14:06:25 GMT


String.Format 日期格式化方法
string.Format("{0:d}",dt);
2005-11-5
string.Format("{0:D}",dt);
2005115
string.Format("{0:f}",dt);
2005115 14:23
string.Format("{0:F}",dt);
2005115 14:23:23
string.Format("{0:g}",dt);
2005-11-5 14:23
string.Format("{0:G}",dt);
2005-11-5 14:23:23
string.Format("{0:M}",dt);
115
string.Format("{0:R}",dt);
Sat, 05 Nov 2005 14:23:23 GMT
string.Format("{0:s}",dt);
2005-11-05T14:23:23
string.Format("{0:t}",dt);
14:23
string.Format("{0:T}",dt);
14:23:23
string.Format("{0:u}",dt);
2005-11-05 14:23:23Z
string.Format("{0:U}",dt);
2005115 6:23:23
string.Format("{0:Y}",dt);
200511
string.Format("{0}",dt);
2005-11-5 14:23:23

當然也能使用自訂的格式,例如string.Format("{0:yyyyMMddHHmmssffff}",dt);
如要得到200506月這樣格式的時間
可以這樣寫:
dt.ToString("yyyyMM", DateTimeFormatInfo.InvariantInfo);
或是
string.Format("{0:yyyyMM}", dt);

下表列出了可被合併以構造自定義模式的模式。這些模式是區分大小寫的;例如,識別“MM”,但不識別“mm”。如果自定義模式包含空白字符或用單引號括起來的字符,則輸出字符串頁也將包含這些字符。未定義為格式模式的一部分或未定義為格式字符的字符按其原義復制。

格式模式說明:
格式
說明
d
月中的某一天。一位數的日期沒有前導零。
dd
月中的某一天。一位數的日期有一個前導零。
ddd
周中某天的縮寫名稱,在AbbreviatedDayNames 中定義。
dddd
周中某天的完整名稱,在DayNames 中定義。
M
月份數字。一位數的月份沒有前導零。
MM
月份數字。一位數的月份有一個前導零。
MMM
月份的縮寫名稱,在AbbreviatedMonthNames 中定義。
MMMM
月份的完整名稱,在MonthNames 中定義。
y
不包含紀元的年份。如果不包含紀元的年份小於10,則顯示不具有前導零的年份。
yy
不包含紀元的年份。如果不包含紀元的年份小於10,則顯示具有前導零的年份。
yyyy
包括紀元的四位數的年份。
gg
時期或紀元。如果要設置格式的日期不具有關聯的時期或紀元字符串,則忽略該模式。
h
12 小時制的小時。一位數的小時數沒有前導零。
hh
12 小時制的小時。一位數的小時數有前導零。
H
24 小時制的小時。一位數的小時數沒有前導零。
HH
24 小時制的小時。一位數的小時數有前導零。
m
分鐘。一位數的分鐘數沒有前導零。
mm
分鐘。一位數的分鐘數有一個前導零。
s
秒。一位數的秒數沒有前導零。
ss
秒。一位數的秒數有一個前導零。
f
秒的小數精度為一位。其餘數字被截斷。
ff
秒的小數精度為兩位。其餘數字被截斷。
fff
秒的小數精度為三位。其餘數字被截斷。
ffff
秒的小數精度為四位。其餘數字被截斷。
fffff
秒的小數精度為五位。其餘數字被截斷。
ffffff
秒的小數精度為六位。其餘數字被截斷。
fffffff
秒的小數精度為七位。其餘數字被截斷。
t
AMDesignator PMDesignator 中定義的AM/PM 指示項的第一個字符(如果存在)。
tt
AMDesignator PMDesignator 中定義的AM/PM 指示項(如果存在)。
z
時區偏移量(“+”“-”後面僅跟小時)。一位數的小時數沒有前導零。例如,太平洋標準時間是“-8”
zz
時區偏移量(“+”“-”後面僅跟小時)。一位數的小時數有前導零。例如,太平洋標準時間是“-08”
zzz
完整時區偏移量(“+”“-”後面跟有小時和分鐘)。一位數的小時數和分鐘數有前導零。例如,太平洋標準時間是“-08:00”
:
TimeSeparator 中定義的默認時間分隔符。
/
DateSeparator 中定義的默認日期分隔符。


===================================

*利用 DateTime.ParseExact 將字串轉回 DateTime 格式
例如得到了 string 的時間,如要轉回 Date 格式,就可使用DateTime.ParseExact來轉換。
string redate = "2005115 6:23:23";
DateTime dt = DateTime.ParseExact(redate, "yyyyMd h:m:s", Nothing, System.Globalization.DateTimeStyles.AllowWhiteSpaces);

如果不確定時間格式可以使用 string[] 來放
string[] DateTimeList =
        {  
            "yyyyMd h:m:s",
            "yyyy/M/d tt hh:mm:ss",
            "yyyy/MM/dd tt hh:mm:ss",
            "yyyy/MM/dd HH:mm:ss",
            "yyyy/MM/dd"
        };
DateTime dtt = DateTime.ParseExact(redate, DateTimeList, CultureInfo.InvariantCulture, DateTimeStyles.AllowWhiteSpaces);

===================================

日期比較:
if (DateTime.Compare(date1, date2) > 0) {
    date1 > date2 
} else {
    date1 < date2
}

===================================

計算2個日期之間的天數差:
DateTime dt1 = Convert.DateTime("2007-8-1");
DateTime dt2 = Convert.DateTime("2007-8-15");
TimeSpan span = dt2.Subtract(dt1);          
int dayDiff = span.Days + 1;                  

===================================

計算某年某月的天數:
int days = DateTime.DaysInMonth(2007, 8);   
days = 31;                                    

===================================

給日期增加一天、減少一天:
DateTime dt =DateTime.Now;
dt.AddDays(1); //
增加一天
dt.AddDays(-1);//
減少一天
其它年份方法類似...

===================================

Oracle SQL裡轉換日期函數:
to_date("2007-6-6",'YYYY-MM-DD");
to_date("2007/6/6",'yyyy/mm/dd");

沒有留言:

張貼留言