1. 程式人生 > >C#時間戳和格式化日期互轉

C#時間戳和格式化日期互轉

有時候我們要對C#時間進行轉換,達到不同的顯示效果

預設格式為:2005-6-6 14:33:34

如果要換成成200506,06-2005,2005-6-6或更多的該怎麼辦呢

我們要用到:DateTime.ToString的方法(String,IFormatProvider) string 為你需要的時間格式如 string format = "yyyy/MM/dd HH:mm:ss";

複製程式碼程式碼如下:
usingSystem; 
usingSystem.Globalization; 
String format="D"; 
DateTimedate=DataTime.Now; 
Response.Write(date.ToString(format,DateTimeFormatInfo.InvariantInfo));

結果輸出

Thursday,June16,2005

引數format格式詳細用法

格式字元關聯屬性/說明

dShortDatePattern

DLongDatePattern

f完整日期和時間(長日期和短時間)

FFullDateTimePattern(長日期和長時間)

g常規(短日期和短時間)

G常規(短日期和長時間)

m、MMonthDayPattern

r、RRFC1123Pattern

s使用當地時間的SortableDateTimePattern(基於ISO8601)

tShortTimePattern

TLongTimePattern

uUniversalSortableDateTimePattern用於顯示通用時間的格式

U使用通用時間的完整日期和時間(長日期和長時間)

y、YYearMonthPattern

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

C#時間格式模式說明

日期格式:yyyyMMdd HH:mm:ss(注意此字串的字母大小寫很嚴格)
yyyy:代表年份
MM:  代表月份
dd:  代表天
HH:  代表小時(24小時制)
mm:  代表分鐘
ss:  代表秒

d月中的某一天。一位數的日期沒有前導零。
dd月中的某一天。一位數的日期有一個前導零。
ddd週中某天的縮寫名稱,在AbbreviatedDayNames中定義。
dddd週中某天的完整名稱,在DayNames中定義。
M月份數字。一位數的月份沒有前導零。
MM月份數字。一位數的月份有一個前導零。
MMM月份的縮寫名稱,在AbbreviatedMonthNames中定義。
MMMM月份的完整名稱,在MonthNames中定義。
y不包含紀元的年份。如果不包含紀元的年份小於10,則顯示不具有前導零的年份。
yy不包含紀元的年份。如果不包含紀元的年份小於10,則顯示具有前導零的年份。
yyyy包括紀元的四位數的年份。
gg時期或紀元。如果要設定格式的日期不具有關聯的時期或紀元字串,則忽略該模式。
h12小時制的小時。一位數的小時數沒有前導零。
hh12小時制的小時。一位數的小時數有前導零。
H24小時制的小時。一位數的小時數沒有前導零。
HH24小時制的小時。一位數的小時數有前導零。
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”是自定義模式。

 DateTime data = DateTime.Now;
        string format = "yyyy/MM/dd HH:mm:ss";
        Debug.Log("data 1=" + data.ToString(format, DateTimeFormatInfo.InvariantInfo));
        Debug.Log("data 2=" + data.ToString("d"));
        Debug.Log("data 3=" + data.ToString("%d"));
        Debug.Log("data 4=" + data.ToString("dd"));
        Debug.Log("data 5=" + data.ToString("ddd"));
        Debug.Log("data 6=" + data.ToString("dddd"));
        Debug.Log("data 7=" + data.ToString("M"));
        Debug.Log("data 8=" + data.ToString("MM"));
        Debug.Log("data 9=" + data.ToString("MMM"));
        Debug.Log("data 10=" + data.ToString("MMMM"));
        Debug.Log("data 11=" + data.ToString("y"));
        Debug.Log("data 12=" + data.ToString("yy"));
        Debug.Log("data 13=" + data.ToString("yyyy"));
        //Debug.Log("data 14=" + data.ToString("h"));
        Debug.Log("data 15=" + data.ToString("hh"));
        //Debug.Log("data 16=" + data.ToString("H"));
        Debug.Log("data 17=" + data.ToString("HH"));
        Debug.Log("data 18=" + data.ToString("m"));
        Debug.Log("data 19=" + data.ToString("mm"));
        Debug.Log("data 20=" + data.ToString("s"));
        Debug.Log("data 21=" + data.ToString("ss"));
        Debug.Log("data 22=" + data.ToString("t"));
        Debug.Log("data 23=" + data.ToString("tt"));
        //Debug.Log("data 24=" + data.ToString("z"));
        Debug.Log("data 25=" + data.ToString("zz"));
        Debug.Log("data 26=" + data.ToString("zzz"));

一下是測試結果(14,16,24 這三個我是沒有測試出來,有大神測試出來了希望相告一下,互相學習!O(∩_∩)O~)


比較方便的是,上面的引數可以隨意組合,並且不會出錯,多試試,肯定會找到你要的時間格式
如要得到2005年06月這樣格式的C#時間

C#時間可以這樣寫:

date.ToString("yyyy年MM月",DateTimeFormatInfo.InvariantInfo)

方法一:Convert.ToDateTime(string)

string格式有要求,必須是yyyy-MM-dd hh:mm:ss

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

方法二:Convert.ToDateTime(string, IFormatProvider)

DateTime dt;

DateTimeFormatInfo dtFormat = new System.Globalization.DateTimeFormatInfo();

dtFormat.ShortDatePattern = "yyyy/MM/dd";//自定義格式

dt = Convert.ToDateTime("2011/05/26", dtFormat);

string format = "2017/08/21/19/00/00";
        DateTimeFormatInfo dtFormat = new System.Globalization.DateTimeFormatInfo();
        dtFormat.LongDatePattern = "yyyy/MM/dd/HH/mm/ss";//自定義格式
        DateTime data = Convert.ToDateTime(format, dtFormat);
        Debug.Log("data 1=" + data.Year);

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

方法二:DateTime.ParseExact()

string dateString = "20110526";

DateTime dt = DateTime.ParseExact(dateString, "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture);

或者

DateTime dt = DateTime.ParseExact(dateString, "yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture);

附參考資訊:

CultureInfo cultureInfo = CultureInfo.CreateSpecificCulture("en-US");
string format = "ddd MMM d HH:mm:ss zz00 yyyy";
string stringValue = DateTime.Now.ToString(format, cultureInfo); // 得到日期字串
DateTime datetime = DateTime.ParseExact("Wed Aug 25 16:28:03 +0800 2010", format, cultureInfo); // 將字串轉換成日期
其他