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 字段,而不是对数字进行硬编码。在本例中,即 JANUARY
。 See 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.JANUARY
或0
来解决你的问题
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
简单的代码,但是有问题!我是 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 字段,而不是对数字进行硬编码。在本例中,即 JANUARY
。 See 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.JANUARY
或0
来解决你的问题
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