Hatena::Groupiphone-dev

Ni chicha, ni limona - 平均から抜けられない僕

2010-01-27

[] 時刻設定をAM/PMではなく24時間表記で行わせたい 17:54  時刻設定をAM/PMではなく24時間表記で行わせたい - Ni chicha, ni limona - 平均から抜けられない僕 を含むブックマーク はてなブックマーク -  時刻設定をAM/PMではなく24時間表記で行わせたい - Ni chicha, ni limona - 平均から抜けられない僕  時刻設定をAM/PMではなく24時間表記で行わせたい - Ni chicha, ni limona - 平均から抜けられない僕 のブックマークコメント

いただいたコメントから確認したところ、ここで紹介している方法はデバイスの「24時間表記」設定次第で意味がなくなってしまうことが分かりました。

間違いであることを残しておくため記事はそのままにしますが、新たにこの記事を読んだ方はご注意ください。

失礼いたしました。

日付や時刻を指定してもらうときに便利なUIDatePickerで、24時間表記で時間を指定させたい(=AM/PM表記を無くしたい)ときの方法がStackOverFlowに載っていたので、補足がてら紹介します。


  iphone - How to disable AM/PM in UIDatePicker - Stack Overflow


あやまって普通のはてなダイアリーの方に記事を書いてしまったため、こちらのブログに移しました。

失礼いたしました。

それではまず

まず、UIDatePickerクラスの復習から。


このUIDatePickerは、日時の表示フォーマットを指定するときのために「datePickerMode」なるプロパティを提供しています。


@property(nonatomic) UIDatePickerMode datePickerMode

開発者はこの値を切り替えることで、表示形式させたいピッカーのフォーマットを指定できます。

利用できる値の定義は以下のとおり。


typedef enum {
   UIDatePickerModeTime,
   UIDatePickerModeDate,
   UIDatePickerModeDateAndTime,
   UIDatePickerModeCountDownTimer
} UIDatePickerMode;

それぞれの値の持つ意味は以下のとおり。

(すみません、今さらな内容ですが自分向けのメモということでご容赦ください)。


定義説明
UIDatePickerModeTime時と分、(optionalで)AM/PMを表示
UIDatePickerModeDate年、月、日を表示
UIDatePickerModeDateAndTime月、日(曜日)、時、分、(optionalで)AM/PMを表示
UIDatePickerModeCountDownTimer時と分。主にタイマーの指定に使用する

上記はドキュメントからの抜粋です。ここまでは良いですよね?*1


で、本題

で、問題なのは上の「AM/PM」という表記。これを何とか消せないか、というのがStackOverFlowでの質問として投げられていたわけです。

実際、私の環境でも上記enumをUIDatePickerModeTimeやUIDatePickerModeDateAndTimeなどを試してみましたが、どちらに設定してもAM/PMが消えません。もちろん、これらを操作できるようなメソッドも無し。どうしたら良いのだろうなと思って続きを読んでみたところ、「これはUIDatePickerに指定したロカールの形式に従って、AM/PMを含む表示フォーマットが決まるよ」という回答が付いていました。

なるほどということで、私も早速回答に使われていた"dk_DK"*2を使用してチェック。


	/*
	 * このUIDatePickerの使い方は、書籍:
	 * 「iPhone SDK 3 Programming - Advanced Mobile Development
	 *    for Apple iPhone and iPod touch」
	 * を参考にしています。
	 */
	UIDatePicker *picker = [[UIDatePicker alloc] initWithFrame:CGRectZero];
	picker.autoresizingMask = UIViewAutoresizingFlexibleWidth;
	picker.datePickerMode = UIDatePickerModeDateAndTime;
	CGSize size = [picker sizeThatFits:CGSizeZero];
	picker.frame = CGRectMake(0.0f, 150.0f, size.width, size.height);
	NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"dk_DK"];
	picker.locale = locale;
	[locale release];
	[self.view addSubview:picker];
	[picker release];

↓ビフォー。


   f:id:paella:20100127175057p:image


↓アフター。


   f:id:paella:20100127175049p:image


成功です。図では時刻がずれていますが、それはアリバイ隠しのためでありどちらもちゃんと現在時刻(デフォルトの場合)で表示してくれたので、設定したロカールで時差が付けられてしまったりすることもありませんでした。

若干バッドノウハウな気がしないでもないですが、まあ、そういうものだと割り切って使えば便利じゃないかと思います。


注意:

iPhone SDK3.1.2のシミュレータ上で確認したときは、上記ロカールの設定は効果がありませんでした。ただ、実機では問題なく動いていますので大丈夫でした。


という、「am/pmがなくなる」という時事ネタでした。お粗末様でしたゴメンナサイスミマセン。

*1:実はUIDatePickerをアプリ作成で使ったことが無いので、新しい知識として覚えました。

*2デンマークです。

mosa10mosa102010/03/15 21:13シミュレーター上で設定>一般>言語環境>書式「日本」に設定すると、アフターの表示になりますよ。

paellapaella2010/03/16 02:03ありがとうございます。なるほど、そういうことだったのですね。

desingdesing2010/05/30 16:01これってiPhone側の設定を24時間表記にしてると自動的にam/pmが消えるんだと思います。
要するにデバイス側の設定でピッカーの表示も変化する・・・という。

paellapaella2010/05/31 15:06desingさん、ありがとうございます。確認してみたら・・・確かにそうですね。また現在のStackOverFlowでも「無理」となっていました。。。

御指摘ありがとうございました。

Online Lenders Online Lenders 2018/08/05 00:03instant loans no credit check <a href="http://directlending.cars">bad credit payday loans</a> loans <a href=http://directlending.cars>loans with bad credit</a>