6

アプリケーションが最後に更新されたときに TextView で表示しようとしています (例: "最終更新時刻は 12:13")。Calendar インスタンスを使用しようとしており、正しく理解していると思っていましたが、問題が発生しているようです。インスタンスを取得するには、メソッド Calendar.getInstance() を使用します。次に、時間と分を取得するには、Calendar.get(Calendar.HOUR) と Calendar.get(Calendar.MINUTE) を使用していました。分のフィールドは正しく返されますが、Calendar .HOUR は 24 時間時計で時間を返しますが、12 時間時計が必要です.HOUR_OF_DAY は 24 時間時計だと思っていました.どこが間違っているのでしょうか?

私が使用しているコードは次のとおりです。

Calendar rightNow = Calendar.getInstance();
mTv.setText("Refreshed! Last updated " + 
           rightNow.get(Calendar.HOUR) + ":" + 
           rightNow.get(Calendar.MINUTE) + ".");

mTv は、更新中の TextView です。助けてくれてありがとう。

また、「最終更新は5分前です」と言っていただけると理想的です。「最終更新時刻 午後 12 時 13 分」の代わりに。しかし、リソースやバッテリーを消耗させずに毎分更新する最善の方法がわかりません...?

4

4 に答える 4

8

時間をフォーマットするために、SimpleDateFormat を Date クラスと組み合わせて使用​​することをお勧めします。

Date now = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("K:mm a");
String formattedTime = sdf.format(now);

仕組みの簡単な説明: SimpleDateFormat オブジェクトを作成し、文字列をそのコンストラクターに渡します。これは、その format() 関数に渡されるすべての時刻/日付オブジェクトをフォーマットする方法を指示します。特別な時間オブジェクトを表す定数/文字がたくさんあります (例: 秒、AM/PM マーカー、.. 完全なリストについてはクラスのドキュメントを参照してください)。

"K:mm a" は、"11:42 AM" 形式を意味します。12 時間形式の時間は 1 桁または 2 桁 (値に応じて)、分 (mm) は常に 2 桁で、AM または PM (a )、時間によって異なります。

その後、Date オブジェクトを format() 関数に渡すだけで、フォーマットされた文字列が得られます。Date は単一の時点を保持するだけであることに注意してください。コンストラクターから引数なしで作成すると ("= new Date()")、現在の時刻が使用されます。別の時間が必要な場合は、長い引数をミリ秒で渡すことができます。これは、Calendar.getTimeInMillis() から取得できます。

「XY分前に更新された関数」を実装した時点で-はい、これを毎分更新する必要があり、更新と現在の時刻の差を計算する必要があります。バッテリーと余分な作業の観点から、それは価値がないと思います。アプリが標準的な短い更新サイクル (たとえば、1 時間ごとなど) を使用し、全画面表示でない場合、ユーザーは画面の上部または下部に時計を表示できます。更新からの経過時間を本当に確認したい場合は、簡単に見て比較できます (ほとんどの場合、数分または時間/分)。そして、私見はユーザーにとって不便ではありません。少なくとも私にとってはそうではありません。何も考えずに比較してしまいます。しかし、私はバッテリーを無駄に消費するアプリを殺す傾向があります。

また、誰もが 12 時間形式を使用しているわけではないことにも注意してください。ユーザー設定/国に応じてローカライズされた時刻形式を取得するには、DateFormat.getTimeInstance() を使用します。これは DateFormat を返しますが、これは SimpleDateFormat のように機能し、format() に時間を渡すだけです。

于 2011-08-08T07:32:03.077 に答える
1

editText次のようなスレッドを使用して、毎分更新できます

Thread t = new Thread(){
public void run() {     
    Calendar oldTime = Calendar.getInstance();
    oldMinute =  oldTime .get(Calendar.MINUTE);
    while(true) {
            Calendar rightNow= Calendar.getInstance();          
        newMinute = rightNow.get(Calendar.MINUTE);
        if(newMinute != oldMinute) {

            oldMinute = newMinute;

            mTv.setText("Refreshed! Last updated " + 
                       rightNow.get(Calendar.HOUR) + ":" + 
                       rightNow.get(Calendar.MINUTE) + ".");
        }
    }
}
t.start();
于 2011-08-08T07:08:23.847 に答える
0

さて、Calendar.get(Calendar.HOUR)は12時間の時間を返すはずですが、少し良いテキストを作成したい場合は、TimeUnitクラスを使用して解析を簡単にすることができます。

long millis = Calendar.getInstance().getTimeInMillis();
String.format("Last updated %d min, %d sec ago.", 
    TimeUnit.MILLISECONDS.toMinutes(millis),
    TimeUnit.MILLISECONDS.toSeconds(millis) - 
    TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis))
);
于 2011-08-08T01:21:22.573 に答える