TTime::FormatL詳解

來源:互聯網
上載者:User

TTime::FormatL詳解

樣本:
TTime time;
Time.HomeTime();
TBuf<32> timeBuf;
time.FormatL(timeBuf,_L(“%F%Y/%M/%D,%H:%T:%S”)); // 2008/08/16,21:22:22

詳解:
格式串分為本地相關和本地無關格式串,也就是說和系統的時間日期中設定的格式是否相關。
以下所有格式字元都要加%
本地無關:
%:因為%是參數字元,所以需要輸出%的時候,要用兩個連續的%%進行轉義
*:加在%後,表示需要縮寫,比如%*T表示對分鐘進行縮寫,如果不是兩位元,則去掉前置0
C:6位的微秒,%C預設是6位的,%*C2表示只取前兩位,%*C4則取前4位
S:2位的秒,加*去掉前置0
T:2位的分,加*去掉前置0
H:24小時制的時,加*去掉前置0
I:12小時制的時,加不加*都會去掉前置0
F:%F參數表示D/M/Y三個參數都是本地無關的,按照格式串原樣輸出,%F需要用在%D、%M、%Y之前
D:2位的日,加*去掉前置0
M:2位的月,加*去掉前置0
Y:4位的年,加*去掉前兩個數字,比如2008隻顯示08
E:星期,英文環境下,Sunday~Saturday,加*顯示縮寫,Sun~Sat;中文環境下,星期一~星期日,加*顯示縮寫,一~日
N:月的名稱,英文環境下,January~December,加*顯示縮寫,Jan~Dec;中文環境下,1月~12月,加*顯示縮寫,阿拉伯數字1~12。注意1月~12月數字都是阿拉伯數字,而不是漢字一~十二
W:2位元字,當前日期處於一年中的第幾周,加*去掉前置0
X:日期尾碼。例如%*D%X顯示形如3rd(三號),%D%X顯示形如02nd(二號)
Z:3位元字,當前日期處於一年中的第幾天,加*去掉前置0
本地相關:
.:(點號)%.預設是小數點,表示分隔秒與毫秒之間的字元。可以通過TLocale::SetDecimalSeparator()設定。
::(冒號)%:表示擷取本地設定中的時間分隔字元,緊跟一個0~3範圍的數字來指定哪一個日期分隔符號。
格式如下:S0 XX S1 YY S2 ZZ S3,其中XX、YY、ZZ代表時分秒,S0~S3代表4個分隔字元。%:0表示第一個分隔字元,依此類推。需要注意的是,本地設定中的時間分隔字元只提供冒號和點號兩種字元。當然,可以通過TLocale:: SetTimeSeparator()對4個分隔字元進行設定,模擬器和真機都未實驗成功,待機狀態的時間分隔字元未更改。
/:(斜杠)%/表示擷取本地設定中的日期分隔符號,和上面一條類似。XX、YY、ZZ代表年月日,其順序可以通過 TLocale:: SetDateFormat()設定。對於分隔字元,本地設定中提供4種字元以供選擇,不過只對S1和S2有效,S0和S3總是Null 字元。通過 SetDateSeparator()可以對4個分隔字元S0~S3進行分別設定,且可以是不同的,在模擬器和真機上都實驗成功,待機狀態的日期分隔符號被成功修改,但是進入系統的時間日期設定時,模擬器和真機均崩潰。
1:%1,本地設定中“年月日”順序中的第一個。年月日順序可以通過TLocale::SetDateFormat()進行設定,格式如下:
EDateAmerican US format (mm/dd/yyyy) 此時%1是月
EDateEuropean European format (dd/mm/yyyy) 此時%1是日
EDateJapanese Japanese format (yyyy/mm/dd) 此時%1是年
中國習慣上採用小日本格式
2:%2,本地設定中“年月日”順序中的第二個。
3:%3,本地設定中“年月日”順序中的第三個。
4:%4,和%2冗餘,本地設定中是EDateAmerican的話,%4是日;EDateEuropean、EDateJapanese的%4是月
5:%5,和%3冗餘,本地設定中是EDateAmerican、EDateEuropean的話,%4是年;EDateJapanese的%4是日
所以,在本地相關的格式串中(沒有%F參數),調用年月日可以直接使用%1%2%3即可,無需加上%M%D%Y(一般在需要去掉前置0的時候才需要加上 %*M%*D%*Y),分隔字元全部使用%/1即可(因為本地的設定中只有S1和S2有效,並且是相同的),當然年月日順序是個問題,如果需要指定順序,那肯定用%F的本地無關格式串了,那樣簡單直觀地多,格式串也不容易寫錯。

A:不管本地設定中是12小時制還是24小時制,%A表示am/pm總是顯示。TLocale:: SetAmPmSpaceBetween()這個方法用來設定是否在時間和am/pm中間留有空格,顯然這個設定會影響到最終格式化後的字串。%*A會強制壓縮這個空格,不管本地是否設定了空格(需要注意的是,這裡提到的本地設定,不一定在系統的時間日期中有設定選項,因為對於使用者而言,只需要設定常用的幾個設定即可,比如這個AmPmSpaceBetween空格,在時間日期中就沒有設定選項,系統預設是有空格的)。至于格式化後的字串中am/pm 出現在時間的前面還是後面,就要看格式串怎麼寫了:%I:%T:%S%A,顯示10:21:36 pm,%A%I:%T:%S,顯示pm 10:21:36
A的擴充選項:
在A前面可以加上+或者-,
%+A表示只有TLocale:: AmPmSymbolPosition()被設定為ELocaleAfter時,才往格式化後的字串中插入am/pm;
%-A表示只有TLocale:: AmPmSymbolPosition()被設定為ELocaleBefore時,才往格式化後的字串中插入am/pm。
很顯然TLocale:: AmPmSymbolPosition()這個設定在時間日期設定中也是沒有的。
eg:%-A%I:%T:%S%+A這個串格式化之後的字串中am/pm出現的位置和設定中的一致。
%-A%I:%T:%S%則表示只有設定了am/pm標誌在前的情況下,am/pm才被插入到格式化後的字串的開頭。
B:和A唯一的區別就是只有在12小時制情況下才顯示am/pm。同樣也有%-B、%+B兩種擴充選項。
J:判斷本地設定是12小時制還是24小時制。%J表示本地設定是12小時制的情況下,在%J之後出現的前置0都被強制去除,所以有了%J參數,沒有必要再加*號。

注意點:
使用%F表示本地無關時,不能使用%1~%5參數
不使用%F參數時,%M、%D、%Y參數不起任何作用,但是%*M、%*D、%*Y起到去除前置0(%*Y是取2位元年份)的作用
SDK中指出:當使用%/0、%/1、%/2、%/3分隔%1~%5代表的日期的時候(或者使用%:0、%:1、%:2、%:3分隔%H、%I、%T、 %S代表的時間的時候),4個分隔字元都要被指定,儘管系統預設S0和S3都是’\0’(Null 字元)。個人理解這麼做是為了讓格式串盡量規範,容易被讀懂,事實上這4個分隔字元想怎麼用就怎麼用,不用都行,唯一的限制在於:當使用%.分隔秒和微秒的時候,%.應當被放在S2和S3的中間。(其實說到底%.系統預設就是點號,一般程式員也不會無聊到調用TLocale::SetDecimalSeparator()方法來更改這個分隔字元的)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.