2011年1月8日

[iPhone] setDateFormat 顯示格式代號


我想用12小時制來顯示時間,以下是我的程式碼…

    

NSDate *currentDateandTime = [NSDate date];
    
NSDateFormatter *date_formater=[[NSDateFormatter alloc]init];
[date_formater setDateFormat:@"YYYY / MM / dd"];
NSString *date = [date_formater stringFromDate:currentDateandTime];//date data
    
[date_formater setDateFormat:@"KK : mm aa"];
NSString *time = [date_formater stringFromDate:currentDateandTime];//time data
 
 


 

首先是先取得目前的時間和日期物件NSDate,存入currentDateandTime

接下來指定顯示的格示,setDateFormat:@"YYYY/MM/dd",這樣會顯示成 2011/01/08

setDateFormat:@"KK:mm aa",會顯示成 02:51 PM


 

以下是setDateFormat可使用的英文代號:



紀元的顯示:
G:顯示AD,也就是公元
 
年的顯示:
yy:年的後面2位數字
yyyy:顯示完整的年
 
月的顯示:
M:顯示成1~12,1位數或2位數
MM:顯示成01~12,不足2位數會補0
MMM:英文月份的縮寫,例如:Jan
MMMM:英文月份完整顯示,例如:January


日的顯示:
d:顯示成1~31,1位數或2位數
dd:顯示成01~31,不足2位數會補0
 
星期的顯示:
EEE:星期的英文縮寫,如Sun
EEEE:星期的英文完整顯示,如,Sunday

 

上/下午的顯示:
aa:顯示AM或PM


小時的顯示:
H:顯示成0~23,1位數或2位數(24小時制)
HH:顯示成00~23,不足2位數會補0(24小時制)
K:顯示成0~12,1位數或2位數(12小時制)
KK:顯示成0~12,不足2位數會補0(12小時制)


分的顯示:
m:顯示0~59,1位數或2位數
mm:顯示00~59,不足2位數會補0


秒的顯示:
s:顯示0~59,1位數或2位數
ss:顯示00~59,不足2位數會補0
S: 毫秒的顯示

時區的顯示:
z / zz /zzz PDT
zzzzPacific Daylight Time
Z / ZZ / ZZZ -0800
ZZZZGMT -08:00
vPT
vvvvPacific Time

2010年12月9日

[C++學習筆記]event物件

Win32之中最具有彈性的同步機制就屬events物件了。Event物件是一種核心物件,它唯一目的就是成為激發狀態或為激發狀態。

SetEvent() : 把 event物件設為激發狀態。
ResetEvent() : 把event 物件設為非激發狀態
PulseEvent() : 如果是一個
Manual Reset Event:把event物件設為激發狀態,喚醒『所有』等待中的執行緒, 然後event恢復為非激發。
如果一個Auto Reset Event:把event物件設為激發狀態,喚醒『一個』等待中的執行緒,然後event恢復為非激發狀態。

Event物件被運用在多種型態的高級 I/0動作, Event物件也可以用來設計你自己的同步物件。
你可以呼叫CreateEvent()來產生一個event物件。

HANDLE CreateEvent(
LPSECURITY_ATTRIBUTES IpEventAttributes,
BOOL bManuaIReset,
BOOL bInitialState,
LPCTSTR IpName

);

參數

IpEventAttributes:安全防護性,NULL表示使用預設屬性,此屬性Windows95會被忽略。

bManualRest:如為FALSE,表示這個event將在變成激發狀態態的event重置為非激發狀態。
(因而喚醒一個執行緒)之後,自動重置reset)為非激發狀態。如果是TRUE,表示不會自動重置,必防護屬性。NU比表示使用預設屬性。此屬性須靠程式動作(呼叫ResetEvent())才能將激發狀

bIntialState:如為TRUE,表示這個event一開始處於激發狀態。如為FALSE,表示這個event一開始處於非激發狀態。

lpName:Event物件的名稱。任何執行緒或行程都可以根據這個文字名稱,使用此一event物件。


回傳值

如果呼叫成功,會傳回一個 eventhandle , GetLastError()會傳回 0。如果lpName所指定的 event物件已經存在,CreateEvent()傳回的是該eventhandle,而不會產生新的一個。這時候 GetLastError()會傳回ERROR_ALREADY_EXISTS。如果 CreateEvent()失敗,傳回的是 NULL,GetLastError()可以獲得更進一步的失敗資訊。

2010年10月25日

[C++學習筆記]Windows 程式設計模型

在傳統的作業系統裡,程式採用的是程序設計模型(procedural programming model),什麼是程序設計模型呢?程序設計模型指的是程式會按照順序由上而下的執行。例如在傳統的C語言裡,程式會從main函式的第一行開始執行到main的最後一行,雖然中間有可能會因為user輸入的東西不同,進入不同的function,但是我們還是可以大概了解程式的執行過程。在傳統的這種C程式裡,呼叫函式是由這個程式的main來決定的。


 

Windows 程式的運作程式和傳統的方法不一樣,Windows程式的運作是採用事件驅動(event-driven)的模型,「事件」(event)就是敲一下鍵盤或是按一下滑鼠這些動作。

我們可以把WinMain當成Windows程式的main function ,WinMain會先建立視窗之後進入訊息迴圈(message loop),訊息迴圈會不斷的收取訊息,再把訊息分配給視窗程式裡,再由視窗程式來負責處理送到視窗的訊息。


 

什麼是訊息呢?訊息從哪裡來?又代表什麼意義呢?Windows定義了許多不同的訊息型態,大部分的訊息名稱,都是由「WM_」開頭的,如下表:

訊息

意義

WM_CHAR

從鍵盤輸入字元

WM_CREATE

建立視窗的時候

WM_DESTROY

視窗被摧毀的時候

WM_LBUTTONDOWN

按下滑鼠左鍵

WM_LBUTTONUP

放開滑鼠左鍵

WM_MOUSEMOVE

移動滑鼠時

WM_PAINT

重新繪製視窗

WM_QUIT

結束應用程式時

WM_SIZE

視窗大小改變時


 

舉個例子來說,當我們按下視窗程式右上角的「X」時,就會產生WM_QUIT的訊息。

訊息產生之後,就會被留在一個訊息佇列中,直到訊息被收取為止。

當視窗程式收取到WM_QUIT這個訊息的時候(代表應用程式應該要結束),因此訊息迴圈會結束,訊息迴圈結束之後應用程式也會跟著結束。


 

視窗程式怎麼處理收到的訊息呢?通常視窗程式會呼叫其他的函式來處理收到的訊息,例如:Windows提供的API 函式或是程式裡的其他函式。

而Win32 API提供了很多函式,像是建立視窗、畫圖或是處理檔案等等。

2010年10月21日

[C++學習筆記]程式碼與介面

Windows程式可以分成兩個部分,「程式碼」和「介面」(UI, User Interface),這兩部分會被整合為一個exe檔。

介面

介面是指工作列、警告視窗、程式的圖示,或是滑鼠指標的外觀等等,它們是.bmp、.ico等等的檔案,而成式的開發者會在一個「資源描述檔」(.rc)裡描述這些檔案,然後透過「RC編譯器」讀取這個「資源描述檔」(.rc檔),把這些UI檔案(.bmp等)製作成一個.RES檔。

程式碼

程式碼則是透過C編譯器,致做出一個.OBJ檔。


 

最後將程式碼和介面結合,最後產生一個執行檔(.exe),才是一個完整的Windows 程式。

2010年10月20日

[C++學習筆記]MFC常用基礎類別


CWnd

CWnd是許多類別的基礎類別,如:Cbutton和CDialog。

因此button、對話框、scroll bar等等,其實都算是一個「視窗」。



CWinApp

CWinApp這個類別是MFC程式的骨架,開始執行程式的時候,CWinApp就存在程式中。

而建構CWinApp時,會呼叫InitInstance()這個function,我們可以把這個function想像成C程式的main() function。



CSring

用於字串,可以讓許多操作變得更容易。