質問をすることでしか得られない、回答やアドバイスがある。

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

ただいまの
回答率

90.46%

  • Java

    16225questions

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

  • Android Studio

    4373questions

    Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

  • Kotlin

    628questions

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

  • Realm

    264questions

    RealmとはSQLiteやCore Dataに代わるモバイルデータベースです。iOSとAndroidの両方でサポートされています。

StringからDate型に変換できない

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 371

asdfhorse

score 7

KotlinでString型からDate型にSimpleDateFormatを使って変換させようとしています。
String型の2018/12/18をDate型の2018/12/18に変換させたいです。
上手くフォーマットを使いこなせず、正しく変換することが出来ません。画像の値:以降のデータになってしまいます。
どなたかご教授お願いします。
イメージ説明

class Kakeibo_AddActivity : FragmentActivity(), DatePick.Callback {
    private lateinit var realm: Realm

    private var kshushi = ""
    private var kgenre = ""

    private val sdf = SimpleDateFormat("yyyy/mm/dd", Locale.JAPAN)


    override fun onCreate(savedInstanceState: Bundle?) {

        super.onCreate(savedInstanceState)
        setContentView(R.layout.testactivity)

        val config = RealmConfiguration.Builder().deleteRealmIfMigrationNeeded().build()

        Realm.setDefaultConfiguration(config)

        realm = Realm.getDefaultInstance()

        val dateEdit = findViewById<TextView>(R.id.date)
        val moneyEdit = findViewById<EditText>(R.id.kmoney)
        val insertBtn = findViewById<Button>(R.id.insertBtn)

        or.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
            override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
                val spinnerParent = parent as Spinner
                kshushi = spinnerParent.selectedItem as String
            }

            override fun onNothingSelected(parent: AdapterView<*>?) {
            }
        }
        genre.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
            override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
                val spinnerParent = parent as Spinner
                kgenre = spinnerParent.selectedItem as String
            }
            override fun onNothingSelected(parent: AdapterView<*>?) {
            }
        }

        insertBtn.setOnClickListener {

            // エディットテキストのテキストを取得
            val kdateo = dateEdit.text.toString()
            val kdaten = sdf.parse(kdateo)
            val money = moneyEdit.text.toString()
            val kmoney = Integer.parseInt(money)

            realm.executeTransaction {
                val maxShushiId = realm.where<Kakeibo>().max("shushiId")
                val targetShushiId = (maxShushiId?.toLong() ?: 0L) + 1L
                val kakeibo = realm.createObject<Kakeibo>(targetShushiId)
                kakeibo.date = kdaten
                kakeibo.shushi = kshushi
                kakeibo.money = kmoney
                kakeibo.genre = kgenre
                Toast.makeText(this, "値:" + kdaten.toString(),
                    Toast.LENGTH_LONG).show()
//                Toast.makeText(
//                    this, "追加しました ID:" + targetShushiId.toString(),
//                    Toast.LENGTH_SHORT
//                ).show()
            }
        }
        var listView: ListView


        val kakeibo_navi: BottomNavigationItemView = findViewById(R.id.navigation_kakeibo)
        val resito_navi: BottomNavigationItemView = findViewById(R.id.navigation_resito)
        val buylist_navi: BottomNavigationItemView = findViewById(R.id.navigation_buylist)
        val analysis_navi: BottomNavigationItemView = findViewById(R.id.navigation_analysis)
        kakeibo_navi.setOnClickListener {
            val intent = Intent(this, kakeiboActivity::class.java)
            startActivity(intent)
        }
        buylist_navi.setOnClickListener {
            val intent = Intent(this, buylistActivity::class.java)
            startActivity(intent)
        }
        resito_navi.setOnClickListener {
            val intent = Intent(this, resitoActivity::class.java)

            startActivity(intent)
        }
        analysis_navi.setOnClickListener {
            val intent = Intent(this, MainActivity::class.java)
            startActivity(intent)
        }
    }

    override fun onDatePicked(year: Int, monthOfYear: Int, dayOfMonth: Int) {
        val str = String.format(Locale.US, "%d/%d/%d", year, monthOfYear + 1, dayOfMonth)
        date.text = str
    }

    override fun onAttachFragment(fragment: Fragment) {
        if (fragment is DatePick) {
            fragment.callback = this
        }
    }

    fun showDatePickerDialog(v: View) {
        val newFragment = DatePick()
        newFragment.show(supportFragmentManager, "datePicker")
    }

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+2

SimpleDateFormatのフォーマットで小文字のmmは分を意味します。月として解釈させたければ、

    private val sdf = SimpleDateFormat("yyyy/MM/dd", Locale.JAPAN)


のようにする必要があるでしょう。

クラスSimpleDateFormat

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

checkベストアンサー

+1

 private val sdf = SimpleDateFormat("yyyy/mm/dd", Locale.JAPAN)


 private val sdf = SimpleDateFormat("yyyy/MM/dd", Locale.JAPAN)


に修正してください.
mm は分を表しています. 月は MMです.

表示したいフォーマットが sdf と同じであれば,
Toastのコードの部分を

Toast.makeText(this, "値:" + sdf.format(kdaten).toString(),
                    Toast.LENGTH_LONG).show()


にしてください.
kdaten.toString()では Date の toString が呼び出されているため,
画像のような表示になってしまします.

Dateのフォーマットについてはドキュメントを参照してください.
SimpleDateFormat

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/12/18 13:50 編集

    String型からDate型に変換できたか確認したいのですが、TextViewやToastで表示させて確認しようと思ったのですが、toStringを呼び出さなくてはいけないため確認が出来ません。Date型そのままを表示し、確認する方法はありますでしょうか?

    キャンセル

  • 2018/12/18 14:13

    変換ができなければ例外が発生するため, 正常に変換できています.
    ただし, こちらが求めている値である保証はありませんが.

    確認する方法ですが, Calendar クラスなどを用いて正確な Date を生成し比較させるなどの方法があります.
    要するにこちらが想定する値を生成し比較させるということです.

    Toastで表示した Date.toString() の意味がわからなければ調べましょう.
    https://docs.oracle.com/javase/jp/8/docs/api/java/util/Date.html

    あと Java のタグを追加した方がよろしいのではないでしょうか.

    キャンセル

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

  • ただいまの回答率 90.46%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Java

    16225questions

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

  • Android Studio

    4373questions

    Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

  • Kotlin

    628questions

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

  • Realm

    264questions

    RealmとはSQLiteやCore Dataに代わるモバイルデータベースです。iOSとAndroidの両方でサポートされています。