【问题标题】:How to check if a string follow mm/DD/yyyy format?如何检查字符串是否遵循 mm/DD/yyyy 格式?
【发布时间】:2022-01-17 09:16:35
【问题描述】:

美好的一天。我有一个 android 应用程序,允许用户在编辑文本中输入他们的生日。

编辑文本具有以下属性:

<com.google.android.material.textfield.TextInputLayout
                style="@style/CustomOutlinedBox"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:boxBackgroundColor="@color/white"
                android:hint="Birthday MM/DD/YYYY">
                <com.google.android.material.textfield.TextInputEditText
                    android:id="@+id/et_new_member_birthday"
                    android:textColor="@color/black"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:textSize="16sp"
                    android:inputType="date"/>
            </com.google.android.material.textfield.TextInputLayout>

如何检查他们的输入是否遵循 mm/DD/yyyy 格式?

编辑: 我尝试添加以下块,不幸的是,它使我的应用程序崩溃了。

private fun isDateValid(date: String): Boolean {
        val format = "MM/dd/yyyy"
        return try {
            val formatter = DateTimeFormatter.ofPattern(format)
            val convertedDate = LocalDate.parse(date, formatter)
            Toast.makeText(this, "Date is $convertedDate", Toast.LENGTH_SHORT).show()


            true
        } catch (e: ParseException) {
            Toast.makeText(this, "Error parsing date.", Toast.LENGTH_LONG).show()
            false
        }
    }

我通过 Activity 调用这个方法:

val etBirthday = binding.etNewMemberBirthday.text.toString()

...

TextUtils.isEmpty(etBirthday) || isDateValid(etBirthday)->{
                showErrorSnackBar(binding.root, "Please input a valid date.", true)
                false
            }
...

【问题讨论】:

  • 也许改用日期选择器类型的东西?一系列的下拉?然后您可以确保传递的日期与正则表达式模式或其他内容匹配。
  • Date checking 的可能重复项;虽然,您正在构建 Android GUI,所以也许您不应该使用文本输入来选择日期:Date picker
  • 我讨厌日期选择器的一件事是它太宽敞了。别担心,这只是为了测试目的。当时间到来时,这可能会派上用场。我就是想知道这个想法能不能实现。
  • 在这种情况下,只需使用 DateTimeFormatterSimpleDateFormat 和合适的模式来解析日期,并捕获并报告异常。
  • 总之......那是 Kotlin,我是一个 Java 人。如果你没有用[java] 标记 kotlin 问题会更合适。

标签: java android kotlin


【解决方案1】:

当用户单击编辑文本打开日期选择器对话框时,您可以简单地使用内置的日期选择器对话框,用户可以轻松选择日期,它可以是任何模式。


    et_new_member_birthday.setOnClickListener {
                val c = Calendar.getInstance()
                val year = c.get(Calendar.YEAR)
                val month = c.get(Calendar.MONTH)
                val day = c.get(Calendar.DAY_OF_MONTH)
    
                val dpd = DatePickerDialog(
                    mActivity,
                    R.style.DateDialogTheme,
                    { _, year, monthOfYear, dayOfMonth ->
                        val cal = Calendar.getInstance()
    
                        cal.set(Calendar.YEAR, year)
                        cal.set(Calendar.MONTH, monthOfYear)
                        cal.set(Calendar.DAY_OF_MONTH, dayOfMonth)
    
                        val pattern = "MM/dd/yyyy"
                        val simpleDateFormat = SimpleDateFormat(pattern)
                        val date = simpleDateFormat.format(cal.time)
                        et_new_member_birthday.setText(date)
                        
                    },
                    year,
                    month,
                    day
                )
                dpd.show()
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-07
    • 2013-09-12
    • 2018-07-31
    相关资源
    最近更新 更多