【问题标题】:SimpleDateFormat with Calendar giving wrong date [duplicate]带有日历的 SimpleDateFormat 给出错误的日期 [重复]
【发布时间】:2020-01-03 10:53:16
【问题描述】:

我有以下代码可以更新我的日历对象。

val date = DatePickerDialog.OnDateSetListener { _, year, monthOfYear, dayOfMonth ->
    myCalendar.set(year, monthOfYear, dayOfMonth)
    myCalendar.set(Calendar.HOUR, myCalendar.get(Calendar.HOUR))
    myCalendar.set(Calendar.MINUTE, myCalendar.get(Calendar.MINUTE))
    myCalendar.set(Calendar.SECOND, myCalendar.get(Calendar.SECOND))
    updateDate()
}

我收到以下值:

year = 2019
month = 11
day = 31

但是当我执行以下代码时,我得到 year = 2020:

private fun updateDate()
{
    val myFormat = "dd/MM/YYYY HH:mm:ss"
    val sdf = SimpleDateFormat(myFormat, Locale.getDefault())
    date_et.setText(sdf.format(myCalendar.time))
}

myCalendar.time 给了我以下字符串:Tue Dec 31 11:47:00 GMT+01:00 2019

但在date_et 上出现以下一个:31/12/2020 11:47:00

为什么我的日历上有 2019 年,而我的视图中却出现了 2020 年?

【问题讨论】:

  • val myFormat = "dd/MM/yyyy HH:mm:ss" - 将 Y 替换为 "y"
  • @Nik 和 yyyy 它正在工作。为什么?
  • @Lechucico @"YYYY" 是基于周的日历年。 @"yyyy" 是普通日历年。
  • 顺便考虑扔掉长期过时且臭名昭著的麻烦SimpleDateFormat和朋友,并将ThreeTenABP添加到您的Android项目中,以便使用java.time,现代Java日期和时间API .使用起来感觉好多了。
  • (A) 在发布之前,请务必彻底搜索 Stack Overflow。 (B) 你真的应该继续学习java.time类。

标签: java android date calendar formatter


【解决方案1】:

替换

val myFormat = "dd/MM/YYYY HH:mm:ss"

val myFormat = "dd/MM/yyyy HH:mm:ss"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-12
    • 1970-01-01
    • 2019-05-12
    • 2018-01-26
    • 2011-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多