Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

2つのString型yyyy-MM-ddの差分日数が欲しい

解決したいこと

androidstudioを使っています。
DBから"yyyy-MM-dd"をString型で2つ取得し、2つの日付の差分の日数を計算したいのですが、どのようにしたらいいでしょうか。

だとStringなので計算できずにいます。
取得の際に他の方法があったり、この後に良い方法がありましたら教えていただきたいです。

該当するソースコード



    String SubName;
    String SubStart;
    String SubLast;

    String SelectSubSQL = "SELECT SubTaskID,TName,PStart,PLast FROM SubTasks WHERE MainTaskID = " + MainID;
    Cursor cursor = Db.rawQuery(SelectSubSQL,null);

    while(cursor.moveToNext())
    {
        int idID = cursor.getColumnIndex("SubTaskID");
        SubID = cursor.getInt(idID);
        int idName = cursor.getColumnIndex("TName");
        SubName = cursor.getString(idName);
        int idStart = cursor.getColumnIndex("PStart");
        SubStart = cursor.getString(idStart);
        int idLast = cursor.getColumnIndex("PLast");
        SubLast = cursor.getString(idLast);
    }
0

3Answer

@nak435 さんの回答で問題ありませんが、java.time.Periodのほうが様々な形に変換できるので良いかもしれないです。

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.Period;
public class Main {
    public static void main(String[] args) throws Exception {
        
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        String dateString1 = "2020-11-10";
        String dateString2 = "1991-12-31";
        
        LocalDate date1 = LocalDate.parse(dateString1, formatter);
        LocalDate date2 = LocalDate.parse(dateString2, formatter);
        
        System.out.println(date1);
        System.out.println(date2);
        
        Period period = Period.between(date2, date1);
        
        System.out.println(period.getDays());
    }
}

Periodであれば 年数、月数を取得することもできます。
また書き方も、よりオブジェクト指向らしいものになります。

2Like

Comments

  1. ありがとうございます。
    こちらも試してみます。

素直に考え得ると、次の2ステップかと思います。
・ステップ1:文字列型の日付を日付型に変換する
・ステップ2;日付型で差をとる

例えば、Kotlinだと、以下のような実装になります。

import java.time.temporal.ChronoUnit
import java.time.LocalDate
import java.time.format.DateTimeFormatter
 
fun main() {
    val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd")
    val dateString1 = "2020-11-10"
    val dateString2 = "1991-12-31"
 
    val date1 = LocalDate.parse(dateString1, formatter)
    val date2 = LocalDate.parse(dateString2, formatter)
 
    println(date1)
    println(date2)
    
    val diffDate = ChronoUnit.DAYS.between(date2, date1)
    
    println(diffDate)
}
2020-11-10
1991-12-31
10542
0Like

Java言語だと↓こうです。

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;

public class Main {
    public static void main(String[] args) throws Exception {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        String dateString1 = "2020-11-10";
        String dateString2 = "1991-12-31";
        
        LocalDate date1 = LocalDate.parse(dateString1, formatter);
        LocalDate date2 = LocalDate.parse(dateString2, formatter);
        
        System.out.println(date1);
        System.out.println(date2);
        
        long diffDate = ChronoUnit.DAYS.between(date2, date1);
        
        System.out.println(diffDate);
    }
}
0Like

Comments

  1. ご丁寧に両方のコードをありがとうございました。
    この流れでやったところ解決いたしました。

Your answer might help someone💌