試験まであと何日とか、今年の残り日数などを知りたい場合には Calendar を使って計算できます。
![[Android] Calendar でイベントまでの日数計算 1x1.trans - [Android] Calendar でイベントまでの日数計算](https://akira-watson.com/wp-content/themes/simplicity2/images/1x1.trans.gif)
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> | 
![[Android] Calendar でイベントまでの日数計算 1x1.trans - [Android] Calendar でイベントまでの日数計算](https://akira-watson.com/wp-content/themes/simplicity2/images/1x1.trans.gif) 
 
現在時刻は
Calendar calendar = Calendar.getInstance()
でも取れますが、ミリ秒で計算したいので
System.currentTimeMillis()
を使いました。
gregory カレンダーは考慮してありません
 
Reference:
Calendar | Android Developers
