??
生產環境下,推薦使用開源時間類框架:
DateTools | DateTools 使用「日期工具庫」
NSDate
- NSDate: 用于處理日期的類,它提供日期的創建、比較、計算時間間隔等功能。
- NSDate 是一個類簇,我們所使用的 NSDate 對象,都是 NSDate 的私有子類的實體。
- NSDate 存儲的是 GMT 時間,使用的時候會根據當前應用指定的 時區 進行時間上的增減,以供計算或顯示。
創建時間對象
- 當前時間
// 現在時間
NSDate *now1 = [NSDate date];
// 現在時間(同上)
NSDate *now2 = [[NSDate alloc] init];
NSDate *now3 = [NSDate new];
- 未來時間和過去時間
// 可以表示的最遠的未來時間 : 4001-01-01 00:00:00 +0000
NSDate *distantFuture = [NSDate distantFuture];
// 可以表示的最早的過去時間 : 0000-12-30 00:00:00 +0000
NSDate *distantPast = [NSDate distantPast];
- 創建相對時間 = 某個時間節點 + 時間戳(NSTimeInterval)
// ----------------------------- 類方法 --------------------------------
// 相對于當前時間
NSDate *dateFromNow = [NSDate dateWithTimeIntervalSinceNow:0];
// 相對于給定的某個已知時間
NSDate *dateFromAnotherDate = [NSDate dateWithTimeInterval:0 sinceDate:now];
// 相對于2001年1月1日0時0分0秒
NSDate *dateFromReferenceDate = [NSDate dateWithTimeIntervalSinceReferenceDate:0];
// 相對于1970年1月1日0時0分0秒
NSDate *dateFrom1970 = [NSDate dateWithTimeIntervalSince1970:0];
// ------------------------------ 實例化方法 (同上)-------------------------------
// 相對于當前時間
NSDate *dateFromNow2 = [[NSDate alloc] initWithTimeIntervalSinceNow:0];
// 相對于給定的某個已知時間
NSDate *dateFromAnotherDate2 = [[NSDate alloc] initWithTimeInterval:0 sinceDate:now];
// 相對于2001年1月1日0時0分0秒
NSDate *dateFromReferenceDate2 = [[NSDate alloc] initWithTimeIntervalSinceReferenceDate:0];
// 相對于1970年1月1日0時0分0秒
NSDate *dateFrom19702 = [[NSDate alloc] initWithTimeIntervalSince1970:0];
- 昨天、今天、明天
// 24H 的時間戳值
NSTimeInterval time = 24 * 60 * 60;
//昨天此刻的時間
NSDate *yesterday = [[NSDate alloc] initWithTimeIntervalSinceNow:- time];
//現在的時間
NSDate *today = [[NSDate alloc] initWithTimeIntervalSinceNow:0];
//明天此刻的時間
NSDate *tomorrow = [[NSDate alloc] initWithTimeIntervalSinceNow:time];
- 日期的比較
// -------------------------------------------------------------
// 1. 通過 compare: 比較
NSComparisonResult result = [tomorrow compare:yesterday];
switch (result) {
case NSOrderedAscending:
// 升序
NSLog(@"tomorrow < yesterday");
break;
case NSOrderedSame:
// 相同
NSLog(@"tomorrow = yesterday");
break;
case NSOrderedDescending:
// 降序
NSLog(@"tomorrow > yesterday");
break;
}
// -------------------------------------------------------------
// 2. 通過時間戳值比較
if ([date1 timeIntervalSince1970] >
[date3 timeIntervalSince1970]){
NSLog(@"date1 > date3");
}else{
NSLog(@"date1 < date3");
}
// -------------------------------------------------------------
// 3. isEqualToDate:
if (![yesterday isEqualToDate:tomorrow]) {
NSLog(@"不同的一天");
}
// -------------------------------------------------------------
// 4. earlierDate:
// 比較兩個給定日期并返回更早的日期
NSDate *earlierDate = [tomorrow earlierDate:yesterday];
NSLog(@"earlierDate: %@",earlierDate); // earlierDate: Wed Apr 12 12:30:36 2017
// -------------------------------------------------------------
// 5. laterDate:
// 比較兩個給定日期并返回更晚的日期
NSDate *laterDate = [tomorrow laterDate:yesterday];
NSLog(@"laterDate: %@",laterDate); // laterDate: Fri Apr 14 12:30:36 2017
- 創建某個指定日期
//mikey.hireDate = [NSDate dateWithNaturalLanguageString:@"Aug 2nd,2010"];
//Specifying date
NSDateComponents *components = [NSDateComponents new];
[components setYear:2010];
[components setDay:2];
[components setMonth:8];
//We need this calendar so that we can use -dateFromComponents function:)
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier: NSCalendarIdentifierGregorian];
//Assigning final date to our Object/Employee
mikey.hireDate = [gregorian dateFromComponents: components];
//Giving date nice look (Aug %day, %year)
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.timeStyle = NSDateFormatterNoStyle;
dateFormatter.dateStyle = NSDateFormatterMediumStyle;
//Displays time in ENG (or localization), i get russian output by default without these two lines: Август 2, 2010
NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
[dateFormatter setLocale:usLocale];
//Applying dateFormatter to our date(mikey.hireDate), because it needs to look fancy... the result will be string, i just don't know how to make mikey.hireDate look right (%month %day, %year) without converting it to String :}
NSString *finalDateItsStringNow = [dateFormatter stringFromDate:mikey.hireDate];
//----------
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setYear:1998];
[components setMonth:5];
[components setDay:1];
NSDate *birthday = [calendar dateFromComponents:components];
NSTimeInterval
- NSTimeInterval(時間戳):用于指定兩個時間節點之間的時間間隔(以秒為單位)。
- NSTimeInterval 始終以 秒 為單位指定; 它在10,000年的范圍內產生了亞毫秒的精度。
聲明
typedef double NSTimeInterval;
- 獲取時間戳
// -------------------------------------------------------------
// 給定時間 相對于 現在時間 的時間戳
NSDate *now = [NSDate date];
NSTimeInterval timeInterval = [now timeIntervalSinceNow];
NSLog(@"timeInterval is %f",timeInterval); // timeInterval is -0.000023
// -------------------------------------------------------------
// 兩個給定時間節點之間的時間戳
NSDate *distantFuture = [NSDate distantFuture];
NSDate *distantPast = [NSDate distantPast];
NSTimeInterval timeInterval = [distantFuture timeIntervalSinceDate:distantPast];
NSLog(@"timeInterval is %.f",timeInterval); // timeInterval is 126227980800
// -------------------------------------------------------------
// 2001年1月1日0時0分0秒 與 現在時間 之間的時間戳
NSDate *now = [NSDate date];
NSTimeInterval timeInterval = [now timeIntervalSinceReferenceDate];
NSLog(@"timeInterval is %f",timeInterval); // timeInterval is 513745346.558782
// -------------------------------------------------------------
// 1970年1月1日0時0分0秒 與 現在時間 之間的時間戳
NSDate *now = [NSDate date];
NSTimeInterval timeInterval = [now timeIntervalSince1970];
NSLog(@"timeInterval is %f",timeInterval); // timeInterval is 1492052119.655184
- NSDate對象與時間戳(NSTimeInterval) 相互轉換
// NSDate對象 ------> 相對于1970年的時間戳
NSDate *now =[[NSDate alloc] init]; //創建此刻的時間
NSTimeInterval timeInterval = [now timeIntervalSince1970];
// 相對于1970年的時間戳 ------> NSDate 對象
NSDate *date = [NSDate dateWithTimeIntervalSince1970:timeInterval]; //獲取時間
- 數字字符串 ——> 時間戳 ——> NSDate 對象
NSString *timeString = @"1234567890";
NSDate *convertDate = [NSDate dateWithTimeIntervalSince1970:[timeString doubleValue]];
NSLog(@"convertDate %@", convertDate); // convertDate Sat Feb 14 07:31:30 2009
NSDateFormatter
NSDateFormatter 是 NSFormatter 的子類。另,NSFormatter 的用途是“將數據在字符串與特定類型的對象之間轉換”,目前 NSFormatter 只有兩個子類 NSNumberFormatter 和 NSDateFormatter。
盡管 NSDateFormatter 提供了許多已定義好的時間格式,但是開發中開發人員更加喜歡自定義時間格式。
過多使用 NSDateFormatter 將影響程序的性能,且程序中 NSDateFormatter 對象的時間格式基本一致,所以使用 NSDateFormatter 的時候盡量使用單例模式。
將時間字符串轉換到
NSDate
對象,一般都是使用"年月日 時分秒",數據庫中的date類型基本上也是這樣的時間類型。 格式一般為:yyyy-MM-dd HH:mm:ss
。
注:yyyy是小寫的!大寫的YYYY的意思有些不同——“將這一年中第一周的周日當作今年的第一天”,因此有時結果和yyyy相同,有時就會不同。-
將
NSDate
對象轉換成特定格式的字符串。轉換后的字符串會根據設備的“區域格式”,顯示特定語言的結果。假如程序需要保證不同語言環境下顯示一致,請注意這方面的問題,使用其他代替方法!
日期格式RFC文檔:Date_Format_Patterns
NSDate *date = [NSDate date];
NSLog(@"date = %@\n",date);
// date = 2017-10-27 05:03:09 +0000
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeZone:[NSTimeZone defaultTimeZone]];
[dateFormatter setLocale:[NSLocale currentLocale]];
[dateFormatter setDateFormat:@"yyyy-MM-dd aHH:mm:ss"];
NSLog(@"%@",[dateFormatter stringFromDate:date]);
// 2017-10-27 下午13:30:52
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"'公元(G=GG=GGG=GGGG=GGGGG)':G'='GG'='GGG'='GGGG'='GGGGG"];
NSLog(@"%@",[dateFormatter stringFromDate:date]);
// 公元(G=GG=GGG=GGGG=GGGGG):公元=公元=公元=公元=公元
[dateFormatter setDateFormat:@"'年度(y=yy=yyy=yyyy=yyyyy)':y'='yy'='yyy'='yyyy'='yyyyy"];
NSLog(@"%@",[dateFormatter stringFromDate:date]);
// 年度(y=yy=yyy=yyyy=yyyyy):2017=17=2017=2017=02017
[dateFormatter setDateFormat:@"'季度(Q=QQ=QQQ=QQQQ)':Q'='QQ'='QQQ'='QQQQ"];
NSLog(@"%@",[dateFormatter stringFromDate:date]);
// 季度(Q=QQ=QQQ=QQQQ):4=04=4季度=第四季度
[dateFormatter setDateFormat:@"'季度(q=qq=qqq=qqq)':q'='qq'='qqq'='qqqq"];
NSLog(@"%@",[dateFormatter stringFromDate:date]);
// 季度(q=qq=qqq=qqq):4=04=4季度=第四季度
[dateFormatter setDateFormat:@"'月份(M=MM=MMM=MMMM=MMMMM)':M'='MM'='MMM'='MMMM'='MMMMM"];
NSLog(@"%@",[dateFormatter stringFromDate:date]);
// 月份(M=MM=MMM=MMMM=MMMMM):10=10=10月=十月=10
// 月份(M=MM=MMM=MMMM=MMMMM):3=03=3月=三月=3
[dateFormatter setDateFormat:@"'本年第幾周(w)':w"];
NSLog(@"%@",[dateFormatter stringFromDate:date]);
// 本年第幾周(w):43
[dateFormatter setDateFormat:@"'本月第幾周(W)':W"];
NSLog(@"%@",[dateFormatter stringFromDate:date]);
// 本月第幾周(W):4
[dateFormatter setDateFormat:@"'本年第幾天(D)':D"];
NSLog(@"%@",[dateFormatter stringFromDate:date]);
// 本年第幾天(D):300
[dateFormatter setDateFormat:@"'本月第幾天(d=dd)':d'='dd"];
NSLog(@"%@",[dateFormatter stringFromDate:date]);
// 本月第幾天(d=dd):27=27
// 本月第幾天(d=dd):3=03
[dateFormatter setDateFormat:@"'本周第幾天(F)':F"];
NSLog(@"%@",[dateFormatter stringFromDate:date]);
// 本周第幾天(F):4
[dateFormatter setDateFormat:@"'星期(e=ee=eee=eeee=eeeee)':e'='ee'='eee'='eeee'='eeeee"];
NSLog(@"%@",[dateFormatter stringFromDate:date]);
// 星期(e=ee=eee=eeee=eeeee):6=06=周五=星期五=五
[dateFormatter setDateFormat:@"'星期(c=ccc=cccc=ccccc)':c'='ccc'='cccc'='ccccc"];
NSLog(@"%@",[dateFormatter stringFromDate:date]);
// 星期(c=ccc=cccc=ccccc):6=周五=星期五=五
[dateFormatter setDateFormat:@"'上午/下午(a)':a"];
NSLog(@"%@",[dateFormatter stringFromDate:date]);
// 上午/下午(a):下午
[dateFormatter setDateFormat:@"'小時(h=hh=H=HH)':h'='hh'='H'='HH"];
NSLog(@"%@",[dateFormatter stringFromDate:date]);
// 小時(h=hh=H=HH):1=01=13=13
[dateFormatter setDateFormat:@"'分鐘(m=mm)':m'='mm"];
NSLog(@"%@",[dateFormatter stringFromDate:date]);
// 分鐘(m=mm):3=03
[dateFormatter setDateFormat:@"'秒(s=ss)':s'='ss"];
NSLog(@"%@",[dateFormatter stringFromDate:date]);
// 秒(s=ss):9=09
[dateFormatter setDateFormat:@"'毫秒(S)':S"];
NSLog(@"%@",[dateFormatter stringFromDate:date]);
// 毫秒(S):9
[dateFormatter setDateFormat:@"'一天中的毫秒(A)':A"];
NSLog(@"%@",[dateFormatter stringFromDate:date]);
// 一天中的毫秒(A):46989943
[dateFormatter setDateFormat:@"'時區(z/zz/zzz=zzzz=v=vvvv)':z'='zzzz'='v'='vvvv"];
NSLog(@"%@",[dateFormatter stringFromDate:date]);
// 時區(z/zz/zzz=zzzz=v=vvvv):GMT+8=中國標準時間=中國時間=中國標準時間
[dateFormatter setDateFormat:@"'時區編號(Z/ZZ/ZZZ=ZZZZ)':Z'='ZZZZ"];
NSLog(@"%@",[dateFormatter stringFromDate:date]);
// 時區編號(Z/ZZ/ZZZ=ZZZZ):+0800=GMT+08:00
- NSDate 對象 —> 格式化日期字符串
NSDate *date = [NSDate date];
//設置日期的格式 :2015年01月03日 03:32:12
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyy年MM月dd日 HH:mm:ss"];
NSString *dateString = [dateFormat stringFromDate:date];
NSLog(@"當前系統時間:%@ \n 格式化后的時間字符串:%@",date,dateString);
當前系統時間: 2017-04-13 04:38:23 +0000
格式化后的時間字符串: 2017 年 04 月 13 日 12:38:23
- 日期字符串 —> NSDate 對象
//----------------------------------------------------------
NSString *str = @"2014-03-21 15:55:55";
// 設置字符串的日期格式
NSDateFormatter *dateFormater = [[NSDateFormatter alloc] init];
[dateFormater setDateFormat:@"yyyy-M-d HH:mm:ss"];
NSDate *date = [dateFormater dateFromString:str];
NSLog(@"date:%@",date); // date:Fri Mar 21 15:55:55 2014
//----------------------------------------------------------
NSString *dateString = @"2019-08-27T00:00:00.000+0000";
// 設置字符串的日期格式
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
// dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
// ISO 8601: 2019-08-27T00:00:00.000+0000
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZ"];
NSDate *date = [dateFormatter dateFromString:dateString];
DDLogDebug(@"date = %@",date); // date = 2019-08-27 00:00:00 +0000
?? 日期字符串轉換為 NSDate 對象時,設置的 NSDateFormatter 對象是字符串的日期格式,而不是轉換后的 NSDate 對象格式。
- NSString —> NSDate —> NSString
// YYModel 框架方法、DateTool 方法
- (BOOL)modelCustomTransformFromDictionary:(NSDictionary *)dic {
// 自定義轉換日期
NSString *treatmentDateString = dic[@"就診時間"];
if (![treatmentDateString isKindOfClass:[NSString class]]) return NO;
// string -> date -> string
// (yyyy-MM-dd HH:mm:ss) -> (yyyy年MM月dd日 HH:mm:ss)
NSDate *date = [NSDate dateWithString:treatmentDateString formatString:@"yyyy-MM-dd"];
_treatmentDate = [date formattedDateWithFormat:@"yyyy年MM月dd日"];
return YES;
}
- NSDateFormatterStyle
typedef NS_ENUM(NSUInteger, NSDateFormatterStyle) { // date and time format styles
NSDateFormatterNoStyle = kCFDateFormatterNoStyle,
NSDateFormatterShortStyle = kCFDateFormatterShortStyle,
NSDateFormatterMediumStyle = kCFDateFormatterMediumStyle,
NSDateFormatterLongStyle = kCFDateFormatterLongStyle,
NSDateFormatterFullStyle = kCFDateFormatterFullStyle
};
代碼示例:
- (NSDateFormatter *)dateFormatter
{
static NSDateFormatter *dateFormatter;
if (!dateFormatter) {
dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter = [[NSDateFormatter alloc] init];
// NSDateFormatterStyle幾種取值樣式
// NSDateFormatterNoStyle
// 例如: (其實就是空白的,不顯示)
// NSDateFormatterShortStyle
// 例如:下午7:00 | 15/5/19
// NSDateFormatterMediumStyle
// 例如:下午7:00:00 | 2013年5月19日
// NSDateFormatterLongStyle
// 例如:GMT +8下午7:00:00 | 2013年5月19日
// NSDateFormatterFullStyle
// 例如:中國標準時間下午7:00:00 | 2013年5月19日 星期日
dateFormatter.timeStyle = NSDateFormatterFullStyle;
dateFormatter.dateStyle = NSDateFormatterLongStyle;
}
return dateFormatter;
}
NSTimeZone
- 時區是一個地理名字,是為了克服各個地區或國家之間在使用時間上的混亂。
基本概念:
- GMT 0:00 格林威治標準時間;
- UTC +00:00 校準的全球時間;
- CCD +08:00 中國標準時間 ;
- 夏時制,英文"DaylightSavingTime"。夏季時將時區內的時間提前(一般為1小時),以節省資源,提高效率。使用夏時制期間,當前時區相對于GMT的時間偏移量會發生變化。在某些應用中可能需要考慮。
- 任何時區都以 GMT 為基準,即,任何 NSTimeZone 對象所代表的時區都是相對于 GMT 的,這里的相對性是 NSTimeZone 中最重要的屬性,我們稱之為當前時區相對于GMT的偏移量。一旦知道了一個偏移量,便可以確定一個時區。在iOS中,偏移量是以"秒"為單位的。
- NSTimeZone 是一個類簇,我們所使用的任何 NSTimeZone 對象都是 NSTimeZone 的私有子類。
- iOS中的時間類 NSDate 中存儲的時間,都是相對于 GMT 的,我們使用 NSDate 時,會根據App的時區設置返回與時區對應的數據。
- iOS系統中的
/usr/share/zoneinfo/
目錄中保存了所有的可根據 地理位置名稱 或 時區別名 得到的時區信息。時區別名都是與具體的地理位置一一對應的。(已越獄的童鞋請看) - iOS中的時區表示方法:
GMT+0800
、GMT-0800
。(【+:東區】【 -:西區】【 08:小時數】【 00:分鐘數】)。GMT+0830
就是指比GMT早8小時外加30分鐘的時區。
方法
-
+ (NSArray *)knownTimeZoneNames;
返回列出系統已知的所有時區ID的字符串數組。
-
+ (NSDictionary *)abbreviationDictionary;
獲取所有的時區名稱縮寫
-
+ (id)timeZoneWithName:(NSString *)tzName;
由時區的名稱獲得對應的NSTimeZone對象
通過時區名稱可以獲得時區文件,通過時區文件就可以獲得“偏移量”,“名稱縮寫”,“是否使用夏時制”等信息。
-
(id)timeZoneWithAbbreviation:(NSString *)abbreviation;
由時區名稱縮寫獲得對應的NSTimeZone對象這里的時區名稱縮寫有兩種情況:
- 第一種是上面說的HKT這樣的縮寫,與時區名稱一一對應,通過這樣的縮寫獲得的NSTimeZone對象,與使用時區名稱獲得得NSTimeZone對象一樣。(大概讀取得是同一個時區文件)
- 第二種是"GMT+0800"這樣格式得縮寫,其實這就是偏移量。通過偏移量在iOS中是不能讀到與之對應得時區文件的,因此就無法知道“時區名稱”,“名稱縮寫”,“是否使用夏時制”這樣的信息了。默認情況下,"時區名稱"和"名稱縮寫"都會賦值為"GMT+0800","是否使用夏時制"則不會設置(默認不使用)。
-
+ (id)timeZoneForSecondsFromGMT:(NSInteger)seconds;
由偏移量獲得對應的NSTimeZone對象只說一點:通過偏移量獲得的 NSTimeZone 對象的“市區名稱”,“名稱縮寫”都會賦值為"GMT+0800","是否使用夏時制"則不會設置(默認不使用)。
注意!!!!該方法不做參數的范圍檢查!!!
根據指定時區格式化日期
NSDate *date = [NSDate date];
//設置日期的格式
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyy年MM月dd日 HH:mm:ss"];
//獲取到所有時區的名字
NSArray *zoneName = [NSTimeZone knownTimeZoneNames];
NSLog(@"%@",zoneName);
//設置時區為紐約時區
NSTimeZone *timeZone = [[NSTimeZone alloc] initWithName:@"America/New_York"];
[dateFormat setTimeZone:timeZone];
NSString *dateString = [dateFormat stringFromDate:date];
NSLog(@"當前時間:%@ \n紐約時間:%@",date,dateString);
當前時間: **2017-04-13 04:46:23 +0000 **
紐約時間: 2017 年 04 月 13 日 00:46:23
NSLocale
若你只開發中國區的應用,需要保證用戶修改當前語言環境時應用的顯示不發生變化。而像NSDateFormatter這樣的類,會根據設備的設置,自動返回不同語言的數據。為了保證返回數據的語言一致,我們需要設置NSLocale。 下面的代碼就可以保證在任何語言環境下,只返回中文的數據:
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh"];
NSDateFormatter *secondDateFormatter = [[NSDateFormatter alloc] init];
[secondDateFormatter setDateFormat:@"cccc"];
secondDateFormatter.locale = locale;
NSDate *date = [NSDate date];
NSLog(@"%@", [secondDateFormatter stringFromDate:date]);
當然,像上面的需求很罕見。
作為大家都不常用的一個類,NSLocale類是將與國家和語言相關的信息進行簡單的組合,包括貨幣,文學方面的信息。 貨幣:貨幣的國際名稱(人民幣的國際貨幣名稱是CNY);貨幣符號(人民幣的國際貨幣符號是¥) 文學:標點符號,文字的書寫順序(左右順序),引用的起止符號等等 若做金融一類的應用可能會用到NSLocale這個類。
附錄
日期說明符號對照一覽表
// -------------------------------------------------------------
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 是任意字符。照原義顯示字符。若要顯示反斜杠字符,請使 “\”。