2016/07/05

[android]今の時間を文字列でほしい

TextViewにログを出そうとしている。
日付はいらないのだが、ミリ秒までの表示はいる。

ネットで検索していて、こういうのを使っていた。

long currentTimeMillis = System.currentTimeMillis();
Date date = new Date(currentTimeMillis);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm:ss SSS");
return simpleDateFormat.format(date);

これはこれで動いていて気にしなかったのだが、Android Studioでgitのcommitをしようとしたら警告が出てきた。
そうか、Android Studioはなにかチェックしてからcommitしてくれるんだ。。。

image

長いよ。
なんか、ロケールを考慮するんだったらちゃんとやれ、みたいなことを言っているようだ。
検索すると、こちらが出てきた。

Y.A.M の 雑記帳: SimpleDateFormat ではなく android.text.format.DateFormat を使おう

まあ、そんなに難しくなく置き換えられそうだ。

return (String) DateFormat.format("HH:mm:ss SSS", Calendar.getInstance());

 

ただ気になったのが、format()がイタリック体で表示されていることだ。
ほぼAndroid Studioのデフォルトで使っているのだが、どういう意味だろう?
そういえばgetInstance()もイタリックだから、クラスメソッドという意味だろう、きっと。

 

で、これを使うと・・・ミリ秒のつもりが"SSS"とそのまま出力された。。
でも、format()→SimpleDateFormatとたどると、ミリ秒はやはり"S"だ。
Examplesもそうなっているので、文字列コピーして使ってみたが、やっぱり"SSS"。

musyamusya: 【Android】日時の取得でミリ秒までとりたい時【メモ】
やはり、"SSS"になってしまうらしい。
理由はわからんが、最初の書き方にロケールを書くしかないか。

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm:ss SSS",
      Locale.getDefault());
return simpleDateFormat.format(new Date());

すっきりせんが、仕方ない。


さて、これでだいたい終わりなのだが、DateFormatとは関係なくもうちょっと気になることがある。

こちらがformat()の説明なのだが、戻り値がCharSequence型だ。
第1引数も戻り値もCharSequence型。
引数には"HH:mm"など書いているので、String型になっていると思うのだけど、特に怒られない。
だが、String型のreturnを直接format()にすると、これはキャストしろと怒られるのだ。
CharSequenceはなんだろう?

 

何かと思ったら、CharSequenceはjava.lang.CharSequenceというinterfaceとのこと。
まあ、ダウンキャストを自動でされると、ちょっと気持ち悪いしね。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。