質問するログイン新規登録
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

解決済

1回答

1882閲覧

日付の日数差を計算したい

sena14

総合スコア109

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2022/02/28 15:19

0

0

このサイトを参考に下記のように日付を比べるコードを書いてみました。
date1とdate2を比較してTextViewに表示させています。
しかし挙動がうまくいっておらず1900/02/04と2022/07/31を比べると44587と表示されるのですが1900/02/04と2022/08/01を比べた際は44557と表示されてしまいます。

07/31が44587という数値が正しいとすると08/01は44588と表示されるはずかと思うのですがどこかコードのおかしな部分ありますでしょうか?

よろしくお願い致します。

import android.content.Intent import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.widget.TextView import java.text.DateFormat import java.text.SimpleDateFormat import java.time.Duration import java.util.* class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val df = SimpleDateFormat("yyyy/mm/dd") val date1 = df.parse("1900/02/04") val date2 = df.parse("2022/08/01") differenceDays(date2, date1) val textView = findViewById<TextView>(R.id.textView) textView .text = differenceDays(date2, date1).toString() } fun differenceDays(date1: Date, date2: Date): Int { val dateTime1 = date1.time val dateTime2 = date2.time val one_date_time = 1000 * 60 * 60 * 24 val diffDays = (dateTime1 - dateTime2) / one_date_time return diffDays.toInt() } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2022/02/28 20:54

1000 * 60 * 60 * 24 で割るのは簡易的な計算で、DST (いわゆる夏時間) を扱う必要があったりするとおかしな結果になるので、日付ライブラリを使ったほうがいいかも…。 https://qiita.com/tktktks10/items/45b0e335d2b2c1470ad2
guest

回答1

0

ベストアンサー

val df = SimpleDateFormat("yyyy/mm/dd")

この指定の仕方の場合、年//日となります。
日付のデータに足りない部分はデフォルトの情報が補完されるので、
ご提示のコードの場合、1900/02/04と2022/08/01の比較は
1990年2月4日と2022年8月1日の比較ではなく、
1990年1月4日0時2分0秒と2022年1月1日0時8分0秒の比較になります。
その前に実験していた1900/02/04と2022/07/31の場合は、
1990年1月4日0時2分0秒と2022年1月31日0時7分0秒の比較になります。

「月」として解析するためには、フォーマットの"mm"を大文字にする必要があります。

val df = SimpleDateFormat("yyyy/MM/dd")

投稿2022/02/28 19:54

swordone

総合スコア20675

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問