TTime::FormatL详解
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
詳解:
格式串分為本地相關(guān)和本地?zé)o關(guān)格式串,也就是說(shuō)和系統(tǒng)的時(shí)間日期中設(shè)置的格式是否相關(guān)。
以下所有格式字符都要加%
本地?zé)o關(guān):
%:因?yàn)?是參數(shù)字符,所以需要輸出%的時(shí)候,要用兩個(gè)連續(xù)的%%進(jìn)行轉(zhuǎn)義
*:加在%后,表示需要縮寫(xiě),比如%*T表示對(duì)分鐘進(jìn)行縮寫(xiě),如果不是兩位數(shù),則去掉前導(dǎo)0
C:6位的微秒,%C默認(rèn)是6位的,%*C2表示只取前兩位,%*C4則取前4位
S:2位的秒,加*去掉前導(dǎo)0
T:2位的分,加*去掉前導(dǎo)0
H:24小時(shí)制的時(shí),加*去掉前導(dǎo)0
I:12小時(shí)制的時(shí),加不加*都會(huì)去掉前導(dǎo)0
F:%F參數(shù)表示D/M/Y三個(gè)參數(shù)都是本地?zé)o關(guān)的,按照格式串原樣輸出,%F需要用在%D、%M、%Y之前
D:2位的日,加*去掉前導(dǎo)0
M:2位的月,加*去掉前導(dǎo)0
Y:4位的年,加*去掉前兩個(gè)數(shù)字,比如2008只顯示08
E:星期,英文環(huán)境下,Sunday~Saturday,加*顯示縮寫(xiě),Sun~Sat;中文環(huán)境下,星期一~星期日,加*顯示縮寫(xiě),一~日
N:月的名稱(chēng),英文環(huán)境下,January~December,加*顯示縮寫(xiě),Jan~Dec;中文環(huán)境下,1月~12月,加*顯示縮寫(xiě),阿拉伯?dāng)?shù)字1~12。注意1月~12月數(shù)字都是阿拉伯?dāng)?shù)字,而不是漢字一~十二
W:2位數(shù)字,當(dāng)前日期處于一年中的第幾周,加*去掉前導(dǎo)0
X:日期后綴。例如%*D%X顯示形如3rd(三號(hào)),%D%X顯示形如02nd(二號(hào))
Z:3位數(shù)字,當(dāng)前日期處于一年中的第幾天,加*去掉前導(dǎo)0
本地相關(guān):
.:(點(diǎn)號(hào))%.默認(rèn)是小數(shù)點(diǎn),表示分隔秒與毫秒之間的字符。可以通過(guò)TLocale::SetDecimalSeparator()設(shè)定。
::(冒號(hào))%:表示獲取本地設(shè)置中的時(shí)間分隔符,緊跟一個(gè)0~3范圍的數(shù)字來(lái)指定哪一個(gè)日期分隔符。
格 式如下:S0 XX S1 YY S2 ZZ S3,其中XX、YY、ZZ代表時(shí)分秒,S0~S3代表4個(gè)分隔符。%:0表示第一個(gè)分隔符,依此類(lèi)推。需要注意的是,本地設(shè)置中的時(shí)間分隔符只提供冒號(hào) 和點(diǎn)號(hào)兩種字符。當(dāng)然,可以通過(guò)TLocale:: SetTimeSeparator()對(duì)4個(gè)分隔符進(jìn)行設(shè)置,模擬器和真機(jī)都未試驗(yàn)成功,待機(jī)狀態(tài)的時(shí)間分隔符未更改。
/:(斜杠)%/表示獲取 本地設(shè)置中的日期分隔符,和上面一條類(lèi)似。XX、YY、ZZ代表年月日,其順序可以通過(guò) TLocale:: SetDateFormat()設(shè)置。對(duì)于分隔符,本地設(shè)置中提供4種字符以供選擇,不過(guò)只對(duì)S1和S2有效,S0和S3總是空字符。通過(guò) SetDateSeparator()可以對(duì)4個(gè)分隔符S0~S3進(jìn)行分別設(shè)定,且可以是不同的,在模擬器和真機(jī)上都試驗(yàn)成功,待機(jī)狀態(tài)的日期分隔符被成 功修改,但是進(jìn)入系統(tǒng)的時(shí)間日期設(shè)定時(shí),模擬器和真機(jī)均崩潰。
1:%1,本地設(shè)置中“年月日”順序中的第一個(gè)。年月日順序可以通過(guò)TLocale::SetDateFormat()進(jìn)行設(shè)定,格式如下:
EDateAmerican US format (mm/dd/yyyy) 此時(shí)%1是月
EDateEuropean European format (dd/mm/yyyy) 此時(shí)%1是日
EDateJapanese Japanese format (yyyy/mm/dd) 此時(shí)%1是年
中國(guó)習(xí)慣上采用小日本格式
2:%2,本地設(shè)置中“年月日”順序中的第二個(gè)。
3:%3,本地設(shè)置中“年月日”順序中的第三個(gè)。
4:%4,和%2冗余,本地設(shè)置中是EDateAmerican的話,%4是日;EDateEuropean、EDateJapanese的%4是月
5:%5,和%3冗余,本地設(shè)置中是EDateAmerican、EDateEuropean的話,%4是年;EDateJapanese的%4是日
所 以,在本地相關(guān)的格式串中(沒(méi)有%F參數(shù)),調(diào)用年月日可以直接使用%1%2%3即可,無(wú)需加上%M%D%Y(一般在需要去掉前導(dǎo)0的時(shí)候才需要加上 %*M%*D%*Y),分隔符全部使用%/1即可(因?yàn)楸镜氐脑O(shè)置中只有S1和S2有效,并且是相同的),當(dāng)然年月日順序是個(gè)問(wèn)題,如果需要指定順序,那 肯定用%F的本地?zé)o關(guān)格式串了,那樣簡(jiǎn)單直觀地多,格式串也不容易寫(xiě)錯(cuò)。
A:不管本地設(shè)置中是12小時(shí)制還是24小時(shí)制,%A表示 am/pm總是顯示。TLocale:: SetAmPmSpaceBetween()這個(gè)方法用來(lái)設(shè)置是否在時(shí)間和am/pm中間留有空格,顯然這個(gè)設(shè)置會(huì)影響到最終格式化后的字符串。%*A會(huì) 強(qiáng)制壓縮這個(gè)空格,不管本地是否設(shè)置了空格(需要注意的是,這里提到的本地設(shè)置,不一定在系統(tǒng)的時(shí)間日期中有設(shè)置選項(xiàng),因?yàn)閷?duì)于用戶(hù)而言,只需要設(shè)定常用 的幾個(gè)設(shè)置即可,比如這個(gè)AmPmSpaceBetween空格,在時(shí)間日期中就沒(méi)有設(shè)置選項(xiàng),系統(tǒng)默認(rèn)是有空格的)。至于格式化后的字符串中am/pm 出現(xiàn)在時(shí)間的前面還是后面,就要看格式串怎么寫(xiě)了:%I:%T:%S%A,顯示10:21:36 pm,%A%I:%T:%S,顯示pm 10:21:36
A的擴(kuò)展選項(xiàng):
在A前面可以加上+或者-,
%+A表示只有TLocale:: AmPmSymbolPosition()被設(shè)置為ELocaleAfter時(shí),才往格式化后的字符串中插入am/pm;
%-A表示只有TLocale:: AmPmSymbolPosition()被設(shè)置為ELocaleBefore時(shí),才往格式化后的字符串中插入am/pm。
很顯然TLocale:: AmPmSymbolPosition()這個(gè)設(shè)置在時(shí)間日期設(shè)置中也是沒(méi)有的。
eg:%-A%I:%T:%S%+A這個(gè)串格式化之后的字符串中am/pm出現(xiàn)的位置和設(shè)定中的一致。
%-A%I:%T:%S%則表示只有設(shè)定了am/pm標(biāo)志在前的情況下,am/pm才被插入到格式化后的字符串的開(kāi)頭。
B:和A唯一的區(qū)別就是只有在12小時(shí)制情況下才顯示am/pm。同樣也有%-B、%+B兩種擴(kuò)展選項(xiàng)。
J:判斷本地設(shè)置是12小時(shí)制還是24小時(shí)制。%J表示本地設(shè)置是12小時(shí)制的情況下,在%J之后出現(xiàn)的前導(dǎo)0都被強(qiáng)制去除,所以有了%J參數(shù),沒(méi)有必要再加*號(hào)。
注意點(diǎn):
使用%F表示本地?zé)o關(guān)時(shí),不能使用%1~%5參數(shù)
不使用%F參數(shù)時(shí),%M、%D、%Y參數(shù)不起任何作用,但是%*M、%*D、%*Y起到去除前導(dǎo)0(%*Y是取2位數(shù)年份)的作用
SDK 中指出:當(dāng)使用%/0、%/1、%/2、%/3分隔%1~%5代表的日期的時(shí)候(或者使用%:0、%:1、%:2、%:3分隔%H、%I、%T、 %S代表的時(shí)間的時(shí)候),4個(gè)分隔符都要被指定,盡管系統(tǒng)默認(rèn)S0和S3都是’/0’(空字符)。個(gè)人理解這么做是為了讓格式串盡量規(guī)范,容易被讀懂,事 實(shí)上這4個(gè)分隔符想怎么用就怎么用,不用都行,唯一的限制在于:當(dāng)使用%.分隔秒和微秒的時(shí)候,%.應(yīng)當(dāng)被放在S2和S3的中間。(其實(shí)說(shuō)到底%.系統(tǒng)默 認(rèn)就是點(diǎn)號(hào),一般程序員也不會(huì)無(wú)聊到調(diào)用TLocale::SetDecimalSeparator()方法來(lái)更改這個(gè)分隔符的)
總結(jié)
以上是生活随笔為你收集整理的TTime::FormatL详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 《好玩游戏物品清单》实现
- 下一篇: 工业交换机与普通交换机区别