程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#基礎知識 >> C#和SqlServer中處理時間格式問題

C#和SqlServer中處理時間格式問題

編輯:C#基礎知識

1.C#中的時間格式

////獲取星期··············································

public static string dt;
     public static string week;
     protected void Button1_Click(object sender, EventArgs e)
     {
          //獲取當前日期是星期幾
         dt = DateTime.Today.DayOfWeek.ToString();
         //根據取得的星期英文單詞返回漢字
         switch (dt)
         {
             case "Monday":
                 week ="星期一";
                 break ;
             case "Tuesday":
                 week = "星期二";
                 break;
             case "Wednesday":
                 week = "星期三";
                 break;
             case "Thursday":
                 week = "星期四";
                 break;
             case "Friday":
                 week = "星期五";
                 break;
             case "Saturday":
                 week = "星期六";
                 break;
             case "Sunday":
                 week = "星期日";
                 break;
         }
         //利用TextBox文本框顯示當前日為星期幾
         TextBox1.Text = week;
     }

//獲取日期.....................................

string strTime = DateTime.Now.ToString("yyyy年MM月dd日");

this.Label1.Text = strTime;

//獲取時間。。。。。。。。。。。。。。。

string strTime =DateTime.Now.ToShortTimeString().ToString();

this.Label1.Text = strTime;

以下更加詳細 ---轉

//獲取時間
DateTime.Now.ToLongTimeString().ToString();   // 20:16:16
DateTime.Now.ToShortTimeString().ToString();   // 20:16
DateTime.Now.ToString("hh:mm:ss");        // 08:05:57
DateTime.Now.TimeOfDay.ToString();        // 20:33:50.7187500

//其他
DateTime.ToFileTime().ToString();       // 128650040212500000
DateTime.Now.ToFileTimeUtc().ToString();   // 128650040772968750
DateTime.Now.ToOADate().ToString();       // 39695.8461709606
DateTime.Now.ToUniversalTime().ToString();   // 2008-9-4 12:19:14

DateTime.Now.Year.ToString();          獲取年份   // 2008
DateTime.Now.Month.ToString();      獲取月份   // 9
DateTime.Now.DayOfWeek.ToString(); 獲取星期   // Thursday
DateTime.Now.DayOfYear.ToString(); 獲取第幾天   // 248
DateTime.Now.Hour.ToString();          獲取小時   // 20
DateTime.Now.Minute.ToString();     獲取分鐘   // 31
DateTime.Now.Second.ToString();     獲取秒數   // 45

//n為一個數,可以數整數,也可以事小數
dt.AddYears(n).ToString();   //時間加n年
dt.AddDays(n).ToString();   //加n天
dt.AddHours(n).ToString();   //加n小時
dt.AddMonths(n).ToString();   //加n個月
dt.AddSeconds(n).ToString();   //加n秒
dt.AddMinutes(n).ToString();   //加n分

    DateTime.Now.ToShortDateString().Replace("-", "") + DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString() + DateTime.Now.Millisecond.ToString();
    //200912281737190 這樣能確保唯一性 可用作id


    //獲取日期+時間
    DateTime.Now.ToString();            // 2008-9-4 20:02:10
    DateTime.Now.ToLocalTime().ToString();        // 2008-9-4 20:12:12

    //獲取日期
    DateTime.Now.ToLongDateString().ToString();    // 2008年9月4日
    DateTime.Now.ToShortDateString().ToString();    // 2008-9-4
    DateTime.Now.ToString("yyyy-MM-dd");        // 2008-09-04
    DateTime.Now.Date.ToString();            // 2008-9-4 0:00:00

00:00:00而在ASP.NET上最常用的只是2003-12-31號一部分而已你可以使用
DateTime.Now.ToString("d")或DateTime.Now.ToShortDateString();
不過具體格式是2003/12/31還是2003-12-31的話要看你的系統配置日期配置是哪一種.
你要想確定取得2003-12-31指定的話使用.Tostring()用戶自定義格式
格式的字符可以看上面說到的文檔.

例如:
.ToString("yyyy-MM-dd")返回2003-11-25
.ToString("yyyyMMdd")返回20031125

DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") 返回2010-11-01 11:46:12
[轉自SDK中的文檔]
d 將日顯示為不帶前導零的數字(如 1)。如果這是用戶定義的數字格式中的唯一字符,請使用%d。
dd 將日顯示為帶前導零的數字(如 01)。
ddd 將日顯示為縮寫形式(例如 Sun)。
dddd 將日顯示為全名(例如 Sunday)。

M 將月份顯示為不帶前導零的數字(如一月表示為 1)。如果這是用戶定義的數字格式中的唯一 字符,
請使用 %M。

MM 將月份顯示為帶前導零的數字(例如 01/12/01)。
MMM 將月份顯示為縮寫形式(例如 Jan)。
MMMM 將月份顯示為完整月份名(例如 January)。
gg 顯示時代/紀元字符串(例如 A.D.)

h 使用12 小時制將小時顯示為不帶前導零的數字(例如 1:15:15 PM)。如果這是用戶定義的數字格式中
的唯一字符,請使用 %h。
hh 使用 12 小時制將小時顯示為帶前導零的數字(例如 01:15:15 PM)。
H 使用 24 小時制將小時顯示為不帶前導零的數字(例如 1:15:15)。如果這是用戶定義的數字

格式中的唯一字符,請使用 %H。
HH 使用 24 小時制將小時顯示為帶前導零的數字(例如 01:15:15)。
m 將分鐘顯示為不帶前導零的數字(例如 12:1:15)。如果這是用戶定義的數字格式中的唯一字符,
請使用 %m。
mm 將分鐘顯示為帶前導零的數字(例如 12:01:15)。

s 將秒顯示為不帶前導零的數字(例如 12:15:5)。如果這是用戶定義的數字格式中的唯一字符,
請使用 %s。
ss 將秒顯示為帶前導零的數字(例如 12:15:05)。

F 顯示秒的小數部分。例如,ff 將精確顯示到百分之一秒,而 ffff 將精確顯示到萬分之一秒。

用戶定義格式中最多可使用七個 f 符號。如果這是用戶定義的數字格式中的唯一字符,請使用 %f。

T 使用 12 小時制,並對中午之前的任一小時顯示大寫的 A,對中午到 11:59 P.M 之間的任一小

時顯示大寫的 P。如果這是用戶定義的數字格式中的唯一字符,請使用 %t。
tt 使用 12 小時制,並對中午之前任一小時顯示大寫的 AM;對中午到 11:59 P.M 之間的任一小
時顯示大寫的 PM。

y 將年份 (0-9) 顯示為不帶前導零的數字。如果這是用戶定義的數字格式中的唯一字符,請使用%y。
yy 以帶前導零的兩位數字格式顯示年份(如果適用)。
yyy 以四位數字格式顯示年份。
yyyy 以四位數字格式顯示年份。

z 顯示不帶前導零的時區偏移量(如 -8)。如果這是用戶定義的數字格式中的唯一字符,請使用%z。
zz 顯示帶前導零的時區偏移量(例如 -08)
zzz 顯示完整的時區偏移量(例如 -08:00)

同樣對時間也可以進行這樣的格式化..你可以使用自定義格式來設置你想要的格式輸出.
你可以使用上表中各字符進行任意的組合不管前後次序多少如你寫入yyyy-yyyy也是可以的..不過我想沒

有多少無聊的人會這麼做.的以是相當自由的

注意的是:進行格式化的一定要是日期DateTime格式..在SQL中的類型也一樣.否則格式無效或出錯.特別

是在DataGrid常{0:IFromat}的格式中會用到

2)日期的輸入

我們在辦理入日期格式式常用DateTime.Pares()
但是這個形式的轉換是相當有限的,有些C#是會不懂你寫入的日期格式的如20031231大家都明白是2003-

12-31號可以C#不認識他.我們可以這樣子進行如下
//設置語言國家
System.IFormatProvider format=new System.Globalization.CultureInfo("zh-CN",true);
//指定轉換格式
Response.Write(DateTime.ParseExact(this.TextBox1.Text,"yyyyMMdd",format));
這樣他就能看出20031231號的日期格式了

不過可惜他只能夠對yyyyMMdd形式進行不能對其它格式進行轉換是不是美中不足?
不過.NET提供了另一種重載版本.
public static DateTime ParseExact(string, string[], IFormatProvider, DateTimeStyles);
可對指定的幾種日期格式進行轉換.
不過具體的操作我想還是大家自己去試驗一下效果可能會更好一些

 

2.SQL中的時間格式

sql server2000中使用convert來取得datetime數據類型樣式(全)

日期數據格式的處理,兩個示例:

CONVERT(varchar(16), 時間一, 20) 結果:2007-02-01 08:02/*時間一般為getdate()函數或數據表裡的字段*/

CONVERT(varchar(10), 時間一, 23) 結果:2007-02-01 /*varchar(10)表示日期輸出的格式,如果不夠長會發生截取*/


語句及查詢結果:
Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM
Select CONVERT(varchar(100), GETDATE(), 1): 05/16/06
Select CONVERT(varchar(100), GETDATE(), 2): 06.05.16
Select CONVERT(varchar(100), GETDATE(), 3): 16/05/06
Select CONVERT(varchar(100), GETDATE(), 4): 16.05.06
Select CONVERT(varchar(100), GETDATE(), 5): 16-05-06
Select CONVERT(varchar(100), GETDATE(), 6): 16 05 06
Select CONVERT(varchar(100), GETDATE(), 7): 05 16, 06
Select CONVERT(varchar(100), GETDATE(), 8): 10:57:46
Select CONVERT(varchar(100), GETDATE(), 9): 05 16 2006 10:57:46:827AM
Select CONVERT(varchar(100), GETDATE(), 10): 05-16-06
Select CONVERT(varchar(100), GETDATE(), 11): 06/05/16
Select CONVERT(varchar(100), GETDATE(), 12): 060516
Select CONVERT(varchar(100), GETDATE(), 13): 16 05 2006 10:57:46:937
Select CONVERT(varchar(100), GETDATE(), 14): 10:57:46:967
Select CONVERT(varchar(100), GETDATE(), 20): 2006-05-16 10:57:47
Select CONVERT(varchar(100), GETDATE(), 21): 2006-05-16 10:57:47.157
Select CONVERT(varchar(100), GETDATE(), 22): 05/16/06 10:57:47 AM
Select CONVERT(varchar(100), GETDATE(), 23): 2006-05-16
Select CONVERT(varchar(100), GETDATE(), 24): 10:57:47
Select CONVERT(varchar(100), GETDATE(), 25): 2006-05-16 10:57:47.250
Select CONVERT(varchar(100), GETDATE(), 100): 05 16 2006 10:57AM
Select CONVERT(varchar(100), GETDATE(), 101): 05/16/2006
Select CONVERT(varchar(100), GETDATE(), 102): 2006.05.16
Select CONVERT(varchar(100), GETDATE(), 103): 16/05/2006
Select CONVERT(varchar(100), GETDATE(), 104): 16.05.2006
Select CONVERT(varchar(100), GETDATE(), 105): 16-05-2006
Select CONVERT(varchar(100), GETDATE(), 106): 16 05 2006
Select CONVERT(varchar(100), GETDATE(), 107): 05 16, 2006
Select CONVERT(varchar(100), GETDATE(), 108): 10:57:49
Select CONVERT(varchar(100), GETDATE(), 109): 05 16 2006 10:57:49:437AM
Select CONVERT(varchar(100), GETDATE(), 110): 05-16-2006
Select CONVERT(varchar(100), GETDATE(), 111): 2006/05/16
Select CONVERT(varchar(100), GETDATE(), 112): 20060516
Select CONVERT(varchar(100), GETDATE(), 113): 16 05 2006 10:57:49:513
Select CONVERT(varchar(100), GETDATE(), 114): 10:57:49:547
Select CONVERT(varchar(100), GETDATE(), 120): 2006-05-16 10:57:49
Select CONVERT(varchar(100), GETDATE(), 121): 2006-05-16 10:57:49.700
Select CONVERT(varchar(100), GETDATE(), 126): 2006-05-16T10:57:49.827
Select CONVERT(varchar(100), GETDATE(), 130): 18 ???? ?????? 1427 10:57:49:907AM
Select CONVERT(varchar(100), GETDATE(), 131): 18/04/1427 10:57:49:920AM

說明:
使用 CONVERT:

CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

參數
expression

是任何有效的 Microsoft® SQL Server™ 表達式。。

data_type

目標系統所提供的數據類型,包括 bigint 和 sql_variant。不能使用用戶定義的數據類型。
length

nchar、nvarchar、char、varchar、binary 或 varbinary 數據類型的可選參數。

style

日期格式樣式,借以將 datetime 或 smalldatetime 數據轉換為字符數據(nchar、nvarchar、char、varchar、nchar 或 nvarchar 數據類型);或者字符串格式樣式,借以將 float、real、money 或 smallmoney 數據轉換為字符數據(nchar、nvarchar、char、varchar、nchar 或 nvarchar 數據類型)。

SQL Server 支持使用科威特算法的阿拉伯樣式中的數據格式。

在表中,左側的兩列表示將 datetime 或 smalldatetime 轉換為字符數據的 style 值。給 style 值加 100,可獲得包括世紀數位的四位年份 (yyyy)。

不帶世紀數位 (yy) 帶世紀數位 (yyyy)
標准
輸入/輸出**
- 0 或 100 (*) 默認值 mon dd yyyy hh:miAM(或 PM)
1 101 美國 mm/dd/yyyy
2 102 ANSI yy.mm.dd
3 103 英國/法國 dd/mm/yy
4 104 德國 dd.mm.yy
5 105 意大利 dd-mm-yy
6 106 - dd mon yy
7 107 - mon dd, yy
8 108 - hh:mm:ss
- 9 或 109 (*) 默認值 + 毫秒 mon dd yyyy hh:mi:ss:mmmAM(或 PM)
10 110 美國 mm-dd-yy
11 111 日本 yy/mm/dd
12 112 ISO yymmdd
- 13 或 113 (*) 歐洲默認值 + 毫秒 dd mon yyyy hh:mm:ss:mmm(24h)
14 114 - hh:mi:ss:mmm(24h)
- 20 或 120 (*) ODBC 規范 yyyy-mm-dd hh:mm:ss[.fff]
- 21 或 121 (*) ODBC 規范(帶毫秒) yyyy-mm-dd hh:mm:ss[.fff]
- 126(***) ISO8601 yyyy-mm-dd Thh:mm:ss.mmm(不含空格)
- 130* Hijri**** dd mon yyyy hh:mi:ss:mmmAM
- 131* Hijri**** dd/mm/yy hh:mi:ss:mmmAM


* 默認值(style 0 或 100、9 或 109、13 或 113、20 或 120、21 或 121)始終返回世紀數位 (yyyy)。
** 當轉換為 datetime時輸入;當轉換為字符數據時輸出。
*** 專門用於 XML。對於從 datetime或 smalldatetime 到 character 數據的轉換,輸出格式如表中所示。對於從 float、money 或 smallmoney 到 character 數據的轉換,輸出等同於 style 2。對於從 real 到 character 數據的轉換,輸出等同於 style 1。
****Hijri 是具有幾種變化形式的日歷系統,Microsoft® SQL Server™ 2000 使用其中的科威特算法。



重要 默認情況下,SQL Server 根據截止年份 2049 解釋兩位數字的年份。即,兩位數字的年份 49 被解釋為 2049,而兩位數字的年份 50 被解釋為 1950。許多客戶端應用程序(例如那些基於 OLE 自動化對象的客戶端應用程序)都使用 2030 作為截止年份。SQL Server 提供一個配置選項("兩位數字的截止年份"),借以更改 SQL Server 所使用的截止年份並對日期進行一致性處理。然而最安全的辦法是指定四位數字年份。


當從 smalldatetime 轉換為字符數據時,包含秒或毫秒的樣式將在這些位置上顯示零。當從 datetime 或 smalldatetime 值進行轉換時,可以通過使用適當的 char 或 varchar 數據類型長度來截斷不需要的日期部分。

 


Eval()時間格式化  

<%# Eval("C_FromTime","{0:d}") %>
 
DateTime.Parse(EquInfo.FindEquInfoByID(Request["id"]).InDate).ToShortDateString()

標准的Format格式Format Format 模式
d MM/dd/yyyy 如(2001-3-27)
D dddd, MMMM dd, yyyy 如(2001年3月27日)
f dddd, MMMM dd, yyyy HH:mm 如(2001年3月27日 0:00)
F dddd, MMMM dd, yyyy HH:mm:ss 如(2001年3月27日 0:00:00)
g MM/dd/yyyy HH:mm 如(2001-3-27 0:00)
G MM/dd/yyyy HH:mm:ss 如(2001-3-27 0:00:00)
m, M MMMM dd 如(三月 27)
r, R ddd, dd MMM yyyy HH’:’mm’:’ss ’GMT’ 如(Mon, 26 Mar 2001 16:00:00 GMT)
s yyyy-MM-dd HH:mm:ss 好像不能使用
t HH:mm 如(0:00)
T HH:mm:ss 如(0:00:00)
u yyyy-MM-dd HH:mm:ss 如(2001-03-26 16:00:00Z)
U dddd, MMMM dd, yyyy HH:mm:ss 如(2001年3月26日 16:00:00)
y, Y MMMM, yyyy 如(2001年3月)
自定義格式列表Format Pattern Description
d 如:2001-3-27
dd 如:27
ddd 如:星期一
dddd 如:星期一(全名)
M 如:三月 27
MM 如:03
MMM 如:三月
MMMM 如:三月(全稱)
y 如:2001年3月
yy 如:01
yyyy 如:2001
gg 如:A.D.
hh, hh* 如:12
HH, HH* 如:00
m 如:三月 27
mm, mm* 如:00(分鐘)
s 如:2001-03-27T00:00:00
ss, ss* 如:00(秒)
t 如:0:00
tt, tt* 如:上午

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved