java - Android - GregorianCalendar 显示错误的月份

标签 java android kotlin gregorian-calendar

我尝试在互联网上搜索,并在 StackOverlflow 上发现了很多与同一主题相关的问题,但找不到任何我能够理解的内容...

所以,我有这个数据类,其中包含 GregorianCalendar 类型的 dateOfOrigin。使用 gson 转换所有 json 并返回包含所有位置的 Observable 数组。在 json 文件中,我将 dateOfOrigin 添加为对象,如下所示:

{
    "id": 6,
    "name": "Fuse",
    "image": "fuse.jpg",
    "street": "Blaesstraat 208",
    "city": "Brussels Hoofdstedelijk Gewest",
    "zip": 1000,
    "date_of_origin": {"year":1994,"month":4,"dayOfMonth":16},
    "parking": true
}

这就是我的数据类的样子:

data class Location (
    val id : Int,
    val name : String,
    val image : String,
    val street : String,
    val city : String,
    val zip : Int,
    @SerializedName("date_of_origin")
    val originDate : GregorianCalendar?,
    val parking : Boolean = true,
    var imageBitmap : Bitmap? = null
)

Whenever I try to set the dateText like this:

originDate?.let {
    dateText = "${it.get(Calendar.DAY_OF_MONTH)} ${it.getDisplayName(Calendar.MONTH, Calendar.SHORT, Locale.getDefault())} ${it.get(Calendar.YEAR)}"

    dateText = resources.getString(R.string.origin_date, dateText)
}

它输出 16 May 1994 而不是 16 Apr 1994

我不知道如何解决这个问题...

编辑 在大多数情况下,从月份中减去 1 似乎可以解决问题。尽管如此,我还是有一个结果应该输出 30 Jan 2016 但显示 1 Feb 2016

"date_of_origin": {"year":2016,"month":1,"dayOfMonth":30}

最佳答案

GregorianCalendar 表示月份,数字范围为 011。这意味着数字 0 表示为 1 月,11 表示为 12 月。

因此,如果您的 API 未使用与 Java 实现相同的逻辑,则需要减去 1

更新: GregorianCalendar(2016, 1, 30) 被理解为 2 月 30 日。这会在内部转换为 3 月 1 日,因此当您从该日期减去一个月时,就会得到 2 月 1 日。您需要创建一个带有减去月份数的 GregorianCalendar 类的实例,即。一月为 0,二月为 1,依此类推。

关于java - Android - GregorianCalendar 显示错误的月份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61887963/

相关文章:

java - Spring数据JPA/Hibernate "Unable to locate Attribute with the given name"

android - 如何使用kotlin在 Dagger 中生成包含@ContributesAndroidInjector的模块?

java - 为什么在java中比较两个整数MAX_VALUE会失败?

Java 2d 游戏关键听众时间限制

java - 无法在两个 Activity 之间传递 int 值

android - 如何为 Lua 的 VM/编译器重新编译已编译的字节码列表?

java - WebSphere 和 PropertyPlaceholderConfigurer

java - Hibernate - 如何保留用公式映射的属性

android - 如何为Android构建商 field 图

kotlin - Kotlin 中的数据类平等