Objective-C 編程:NSDate

??
生產環境下,推薦使用開源時間類框架:
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

NSDateFormatterNSFormatter 的子類。另,NSFormatter 的用途是“將數據在字符串與特定類型的對象之間轉換”,目前 NSFormatter 只有兩個子類 NSNumberFormatterNSDateFormatter

盡管 NSDateFormatter 提供了許多已定義好的時間格式,但是開發中開發人員更加喜歡自定義時間格式。

過多使用 NSDateFormatter 將影響程序的性能,且程序中 NSDateFormatter 對象的時間格式基本一致,所以使用 NSDateFormatter 的時候盡量使用單例模式。

  1. 將時間字符串轉換到 NSDate 對象,一般都是使用"年月日 時分秒",數據庫中的date類型基本上也是這樣的時間類型。 格式一般為:yyyy-MM-dd HH:mm:ss
    注:yyyy是小寫的!大寫的YYYY的意思有些不同——“將這一年中第一周的周日當作今年的第一天”,因此有時結果和yyyy相同,有時就會不同。

  2. 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 中國標準時間 ;
  1. 夏時制,英文"DaylightSavingTime"。夏季時將時區內的時間提前(一般為1小時),以節省資源,提高效率。使用夏時制期間,當前時區相對于GMT的時間偏移量會發生變化。在某些應用中可能需要考慮。
  2. 任何時區都以 GMT 為基準,即,任何 NSTimeZone 對象所代表的時區都是相對于 GMT 的,這里的相對性是 NSTimeZone 中最重要的屬性,我們稱之為當前時區相對于GMT的偏移量。一旦知道了一個偏移量,便可以確定一個時區。在iOS中,偏移量是以"秒"為單位的。
  3. NSTimeZone 是一個類簇,我們所使用的任何 NSTimeZone 對象都是 NSTimeZone 的私有子類。
  4. iOS中的時間類 NSDate 中存儲的時間,都是相對于 GMT 的,我們使用 NSDate 時,會根據App的時區設置返回與時區對應的數據。
  5. iOS系統中的 /usr/share/zoneinfo/目錄中保存了所有的可根據 地理位置名稱 或 時區別名 得到的時區信息。時區別名都是與具體的地理位置一一對應的。(已越獄的童鞋請看)
  6. iOS中的時區表示方法:GMT+0800GMT-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 是任意字符。照原義顯示字符。若要顯示反斜杠字符,請使 “\”。

參考

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容