試験まであと何日とか、今年の残り日数などを知りたい場合には Calendar を使って計算できます。
2021.2.1
Calendar
来年の12月24日まであと何日あるのかなど、結構面倒です。11月は30日しかないけど10月は31日で、あれうるう年って今年?など。
そういう時に便利なのがCalendarです。日数計算をしてくれますので。
getInstance()
CalendarにはクラスメソッドとしてgetInstance()があり、これを使ってインスタンスを取得します。 このメソッドは、カレンダフィールドが現在の日付と時刻で初期化されたCalendarオブジェクトを返してくれます。
1 |
Calendar calendar = Calendar.getInstance(); |
日数計算のflow:
- Calendar に目標の日時を設定する
- set(int year, int month, int date)
- その日時のミリ秒を取り出す
- getTimeInMillis()
- 現在時刻をミリ秒で取り出す
- 差分の日数を計算
Calendar の set メソッドでの日時の設定は
4通りほどあります。
1 2 3 4 5 6 7 8 9 10 11 |
void set(int field, int value) 指定されたカレンダフィールドを指定された値に設定します。 void set(int year, int month, int date) カレンダフィールド YEAR、MONTH、および DAY_OF_MONTH の値を設定します。 void set(int year, int month, int date, int hourOfDay, int minute) カレンダフィールド YEAR、MONTH、DAY_OF_MONTH、HOUR_OF_DAY、および MINUTE の値を設定します。 void set(int year, int month, int date, int hourOfDay, int minute, int second) フィールド YEAR、MONTH、DAY_OF_MONTH、HOUR、MINUTE、および SECOND の値を設定します。 |
2番目の年、月、日 の設定を使います。尚、MONTHは1月が0となるので注意
Ref: Java Platform Standard Ed.6
サンプルコード
まとめたコードです
MainActivity.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
//package your.app.name; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.widget.TextView; import java.util.Calendar; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Paris Olympic // 2024/7/26 int year = 2024; int month = 7; int date = 26; Calendar calendar1 = Calendar.getInstance(); // 2024/7/26 開会式 // Month 値は 0 から始まるので注意 month = month -1; calendar1.set(year, month, date); // 1970/1/1 から設定した calendar1 のミリ秒 long timeMillis1 = calendar1.getTimeInMillis(); // 現在時刻のミリ秒 long currentTimeMillis = System.currentTimeMillis(); // 差分のミリ秒 long diff = timeMillis1 - currentTimeMillis; // ミリ秒から秒へ変換 diff = diff / 1000; // minutes diff = diff / 60; // hour diff = diff / 60; // day diff = diff / 24; TextView textView = findViewById(R.id.text_view); String str = diff + " 日"; textView.setText( str ); } } |
activity_main.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/text1" android:textColor="#000" android:textSize="40sp" android:textStyle="italic" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.3" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="10dp" android:text="@string/text2" android:textColor="#000" android:textSize="24sp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.5" /> <TextView android:id="@+id/text_view" android:textSize="60sp" android:textColor="#f40" android:textStyle="bold" android:layout_margin="10dp" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.6" /> </androidx.constraintlayout.widget.ConstraintLayout> |
strings.xml
1 2 3 4 5 |
<resources> <string name="app_name">YourAppName</string> <string name="text1">"Paris 2024\n Olympic"</string> <string name="text2">"2024年7月26日 まであと"</string> </resources> |
現在時刻は
Calendar calendar = Calendar.getInstance()
でも取れますが、ミリ秒で計算したいので
System.currentTimeMillis()
を使いました。
gregory カレンダーは考慮してありません
Reference:
Calendar | Android Developers