關於C#中的DateTime類型的技巧

來源:互聯網
上載者:User

標籤:des   使用   os   for   io   代碼   

* datetime.now.tostring()方法預設的你是無法得到全部的時間的格式的,只能得到日期,得不到具體時間,如果要具體時間,就應該使用 datetime的tostring()重載,datetime.now.tostring("F")這樣就能拿到完整的時間格式了.參數format格式詳細用法
 格式字元 關聯屬性/說明
 d ShortDatePattern
 D LongDatePattern
 f 完整日期和時間(長日期和短時間)
 F FullDateTimePattern(長日期和長時間)
 g 常規(短日期和短時間)
 G 常規(短日期和長時間)
 m、M MonthDayPattern
 r、R RFC1123Pattern
 s 使用當地時間的 SortableDateTimePattern(基於 ISO 8601)
 t ShortTimePattern
 T LongTimePattern
 u UniversalSortableDateTimePattern 用於顯示通用時間的格式
 U 使用通用時間的完整日期和時間(長日期和長時間)
 y、Y YearMonthPattern
 
 下表列出了可被合并以構造自訂模式的模式。這些模式是區分大小寫;例如,識別“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 中定義的預設日期分隔符號。
 % c 其中 c 是格式模式(如果單獨使用)。如果格式模式與原義字元或其他格式模式合并,則可以省略“%”字元。
 \ c 其中 c 是任一字元。照原義顯示字元。若要顯示反斜線字元,請使用“\\”。
 
 只有上面第二個表中列出的格式模式才能用於建立自訂模式;在第一個表中列出的標準格式字元不能用於建立自訂模式。自訂模式的長度至少為兩個字元;例如,
 
 DateTime.ToString( "d") 返回 DateTime 值;“d”是標準短日期模式。
 DateTime.ToString( "%d") 返回月中的某天;“%d”是自訂模式。
 DateTime.ToString( "d ") 返回後面跟有一個空白字元的月中的某天;“d”是自訂模式。
 
 比較方便的是,上面的參數可以隨意組合,並且不會出錯,多試試,肯定會找到你要的時間格式
 如要得到2005年06月 這樣格式的時間
 可以這樣寫:
 date.ToString("yyyy年MM月", DateTimeFormatInfo.InvariantInfo)//今天
DateTime.Now.Date.ToShortDateString();
//昨天,就是今天的日期減一
DateTime.Now.AddDays(-1).ToShortDateString();
//明天,同理,加一
DateTime.Now.AddDays(1).ToShortDateString();//本周(要知道本周的第一天就得Crowdsourced Security Testing道今天是星期幾,從而得知本周的第一天就是幾天前的那一天,要注意的是這裡的每一周是從周日始至周六止
DateTime.Now.AddDays(Convert.ToDouble((0 -Convert.ToInt16(DateTime.Now.DayOfWeek)))).ToShortDateString();
DateTime.Now.AddDays(Convert.ToDouble((6 -Convert.ToInt16(DateTime.Now.DayOfWeek)))).ToShortDateString();
//如果你還不明白,再看一下中文顯示星期幾的方法就應該懂了
//由於DayOfWeek返回的是數位星期幾,我們要把它轉換成漢字方便我們閱讀,有些人可能會用switch來一個一個地對照,其實不用那麼麻煩的             
string[] Day = new string[] { "星期日", "星期一", "星期二","星期三", "星期四", "星期五", "星期六" };
Day[Convert.ToInt16(DateTime.Now.DayOfWeek)];//上周,同理,一個周是7天,上周就是本周再減去7天,下周也是一樣
DateTime.Now.AddDays(Convert.ToDouble((0 -Convert.ToInt16(DateTime.Now.DayOfWeek))) -7).ToShortDateString();
DateTime.Now.AddDays(Convert.ToDouble((6 -Convert.ToInt16(DateTime.Now.DayOfWeek))) -7).ToShortDateString();
//下周
DateTime.Now.AddDays(Convert.ToDouble((0 -Convert.ToInt16(DateTime.Now.DayOfWeek))) +7).ToShortDateString();
DateTime.Now.AddDays(Convert.ToDouble((6 -Convert.ToInt16(DateTime.Now.DayOfWeek))) +7).ToShortDateString();
//本月,很多人都會說本月的第一天嘛肯定是1號,最後一天就是下個月一號再減一天。當然這是對的
//一般的寫法
DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + "1";//第一天
DateTime.Parse(DateTime.Now.Year.ToString() +DateTime.Now.Month.ToString() +"1").AddMonths(1).AddDays(-1).ToShortDateString();//最後一天//巧用C#裡ToString的字元格式設定化更簡便
DateTime.Now.ToString("yyyy-MM-01");
DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddMonths(1).AddDays(-1).ToShortDateString();//上個月,減去一個月份
DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddMonths(-1).ToShortDateString();
DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddDays(-1).ToShortDateString();
//下個月,加去一個月份
DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddMonths(1).ToShortDateString();
DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddMonths(2).AddDays(-1).ToShortDateString();
//7天后
DateTime.Now.Date.ToShortDateString();
DateTime.Now.AddDays(7).ToShortDateString();
//7天前
DateTime.Now.AddDays(-7).ToShortDateString();
DateTime.Now.Date.ToShortDateString();//本年度,用ToString的字元格式設定化我們也很容易地算出本年度的第一天和最後一天
DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).ToShortDateString();
DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddYears(1).AddDays(-1).ToShortDateString();
//上年度,不用再解釋了吧
DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddYears(-1).ToShortDateString();
DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddDays(-1).ToShortDateString();
//下年度
DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddYears(1).ToShortDateString();
DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddYears(2).AddDays(-1).ToShortDateString();//本季度,很多人都會覺得這裡痛點,需要寫個長長的過程來判斷。其實不用的,我們都知道一年四個季度,一個季度三個月
//首先我們先把日期推到本季度第一個月,然後這個月的第一天就是本季度的第一天了
DateTime.Now.AddMonths(0 - ((DateTime.Now.Month - 1) %3)).ToString("yyyy-MM-01");
//同理,本季度的最後一天就是下季度的第一天減一
DateTime.Parse(DateTime.Now.AddMonths(3 - ((DateTime.Now.Month - 1)%3)).ToString("yyyy-MM-01")).AddDays(-1).ToShortDateString();
//下季度,相信你們都知道了。。。。收工
DateTime.Now.AddMonths(3 - ((DateTime.Now.Month - 1) %3)).ToString("yyyy-MM-01");
DateTime.Parse(DateTime.Now.AddMonths(6 - ((DateTime.Now.Month - 1)%3)).ToString("yyyy-MM-01")).AddDays(-1).ToShortDateString();
//上季度
DateTime.Now.AddMonths(-3 - ((DateTime.Now.Month - 1) %3)).ToString("yyyy-MM-01");
DateTime.Parse(DateTime.Now.AddMonths(0 - ((DateTime.Now.Month - 1)%3)).ToString("yyyy-MM-01")).AddDays(-1).ToShortDateString();------------------------------------------ System.Globalization.DateTimeFormatInfo dti = newSystem.Globalization.DateTimeFormatInfo();
dti.ShortDatePattern = "yyyyMMddHHmmss";
string strToDecode = "20090112123030";
DateTime dt = DateTime.ParseExact(strToDecode, "d", dti); ------------  TimeSpan ------------------ 程式碼: 
label1.Text = "2004-1-115:36:05";
label2.Text = "2004-3-120:16:35";
   
   DateTime d1 =newDateTime(2004,1,1,15,36,05);
   DateTime d2 =newDateTime(2004,3,1,20,16,35);
   
   TimeSpan d3 =d2.Subtract(d1);   label3.Text ="相差:"
   +d3.Days.ToString()+"天"
   +d3.Hours.ToString()+"小時"
   +d3.Minutes.ToString()+"分鐘"
   +d3.Seconds.ToString()+"秒";
程式碼: 
c#的時間段TimeSpan對象的最大間隔單位為天簡單的實現如下:System.DateTime date1 = new System.DateTime(1996, 6, 3, 22,15, 0);
System.DateTime date2 = new System.DateTime(1996, 12, 6, 13, 2,0);
System.DateTime date3 = new System.DateTime(1996, 10, 12, 8, 42,0);// diff1 gets 185 days, 14 hours, and 47 minutes.
System.TimeSpan diff1 = date2.Subtract(date1);// date4 gets 4/9/1996 5:55:00PM.
System.DateTime date4 = date3.Subtract(diff1);// diff2 gets 55 days 4 hours and 20 minutes.
System.TimeSpan diff2 = date2 - date3;// date5 gets 4/9/1996 5:55:00PM.
System.DateTime date5 = date1 - diff2;
private string DateDiff(DateTime DateTime1, DateTimeDateTime2)
{  string dateDiff = null;
   TimeSpan ts1 = newTimeSpan(DateTime1.Ticks);
   TimeSpan ts2 = newTimeSpan(DateTime2.Ticks);
   TimeSpan ts =ts1.Subtract(ts2).Duration();
   dateDiff =ts.Days.ToString()+"天"+ ts.Hours.ToString()+"小時"+ts.Minutes.ToString()+"分鐘"+ ts.Seconds.ToString()+"秒";
   return dateDiff;
}

說明:
1.DateTime實值型別代表了一個從公元0001年1月1日0點0分0秒到公元9999年12月31日23點59分59秒之間的具體日期時刻。因此,你可以用DateTime實值型別來描述任何在想象範圍之內的時間。一個DateTime值代表了一個具體的時刻
2.TimeSpan值包含了許多屬性與方法,用於訪問或處理一個TimeSpan值
下面的列表涵蓋了其中的一部分:
Add:與另一個TimeSpan值相加。
Days:返回用天數計算的TimeSpan值。
Duration:擷取TimeSpan的絕對值。
Hours:返回用小時計算的TimeSpan值
Milliseconds:返回用毫秒計算的TimeSpan值。
Minutes:返回用分鐘計算的TimeSpan值。
Negate:返回當前執行個體的相反數。
Seconds:返回用秒計算的TimeSpan值。
Subtract:從中減去另一個TimeSpan值。
Ticks:返回TimeSpan值的tick數。
TotalDays:返回TimeSpan值表示的天數。
TotalHours:返回TimeSpan值表示的小時數。
TotalMilliseconds:返回TimeSpan值表示的毫秒數。
TotalMinutes:返回TimeSpan值表示的分鐘數。
TotalSeconds:返回TimeSpan值表示的秒數。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.