Kotlin DateTimeformat 返回错误的月份

Kotlin DateTimeformat returning wrong month

简单的代码,但是有问题!我是 Kotlin 的新手,试图获取日期字符串并将其转换为 Date() 格式。当我转换回来时,它给出了错误的月份。示例:

var cal = Calendar.getInstance()
cal.timeZone = TimeZone.getTimeZone("America/New_York")
cal.set(2018, 1, 20)
val date: Date = cal.time
println(date)  //This prints: Tue Feb 20 23:25:59 EST 2018

当月份设置为 1(一月)时,为什么我得到的是二月?

最终,我想把一个"MM/dd/yyyy"格式的字符串转换成Date()格式,但似乎遇到了麻烦(需要支持API 15),并且使用 Calendar 是我尝试在没有需要稍后 APIs 的日期格式化程序的情况下执行此操作。有更好的方法吗?

月份是从 0 开始的,所以 0 是一月,1 是二月,依此类推

Java 中 Calendar class 的月份是 0 索引的。

cal.set(2018, 0, 20)

就是你什么。

但是,这就是为什么通常最好使用日历 class 中定义的最终 int 字段,而不是对数字进行硬编码。在本例中,即 JANUARYSee here.

这样会得到:

cal.set(2018, Calendar.JANUARY, 20)

The first month of the year in the Gregorian and Julian calendars is JANUARY which is 0; the last depends on the number of months in a year.

因此,设置一月

var cal = Calendar.getInstance()
cal.timeZone = TimeZone.getTimeZone("America/New_York")
cal.set(2018, 0, 20) // set Month field to Zero
val date: Date = cal.time
println(date)  //This prints: Sat Jan 20 23:25:59 EST 2018

使用 Calendar 获取月份

Calendar calendar=Calendar.getInstance();
calendar.set(2018, Calendar.JANUARY, 20)//set date format
val date: Date = calendar.time
println(date)//print : 2018 Jan 20

编码愉快!!

Why am I getting Feb when month is set to 1 (January)?

你得到 Feb 因为索引 1 = FEB

cal.set(2018, month index, 20)方法中,具有MONTH索引参数的第二个参数索引如下:

    0 = JAN

    1 = FEB

    2=MARCH

    3=APRIL

    4=MAY

    5=JUNE

    6=JULY

    7=AUG

    8=SEPT

    9=OCT

    10=NOV

    11=DEC

回答:使用Calendar.JANUARY0来解决你的问题

var cal = Calendar.getInstance()
cal.timeZone = TimeZone.getTimeZone("America/New_York")
cal.set(2018, 0, 20)
val date: Date = cal.time
println(date)  //This prints: Tue Jan 20 23:25:59 EST 2018