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總是空字符。通過 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都是’’(空字符)。個人理解這么做是為了讓格式串盡量規范,容易被讀懂,事實上這4個分隔符想怎么用就怎么用,不用都行,唯一的限制在于:當使用%.分隔秒和微秒的時候,%.應當被放在S2和S3的中間。(其實說到底%.系統默認就是點號,一般程序員也不會無聊到調用TLocale::SetDecimalSeparator()方法來更改這個分隔符的)
總結
以上是生活随笔為你收集整理的TTime::FormatL 详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ubuntu下面高效率小工具总结
- 下一篇: JAVA--状态模式