考虑到夏令时是否处于活动状态,如何在Android上获取当前时区?

考虑到夏令时是否处于活动状态,如何在Android上获取当前时区?,android,time,timezone,dst,Android,Time,Timezone,Dst,我有一个功能,提示用户使用时间和日期选择器选择时间和日期,然后需要将其转换为历元值以供进一步使用。我面临的问题是,无论夏令时是否处于活动状态,从日、月、年、小时、分钟转换为历元都会得到相同的值 这是我用来转换成历元值的代码 fun dateToEpochForTimezone(year: Int, month: Int, dayOfMonth: Int, hour: Int, minute: Int): Long { val str = "$month $dayOfMonth

我有一个功能,提示用户使用时间和日期选择器选择时间和日期,然后需要将其转换为历元值以供进一步使用。我面临的问题是,无论夏令时是否处于活动状态,从
日、月、年、小时、分钟
转换为
历元
都会得到相同的值

这是我用来转换成历元值的代码

fun dateToEpochForTimezone(year: Int, month: Int, dayOfMonth: Int, hour: Int, minute: Int): Long {
    val str = "$month $dayOfMonth $year $hour:$minute ${TimeZone.getDefault().getDisplayName(true, TimeZone.SHORT)}"
    val df = SimpleDateFormat("MM dd yyyy HH:mm z", Locale.getDefault())
    val date: Date = df.parse(str)
    return date.time //epoch
}
这里的主要部分是这个
TimeZone.getDefault().getDisplayName(true,TimeZone.SHORT)
。如果要返回夏令时,则布尔参数为true;如果要返回标准时间,则布尔参数为false

问题在于,如果在该时区内观察到夏令时,传递
true
总是返回标准时间+1小时,而不管夏令时是否实际处于活动状态。为了检查,我用所有12个月的值调用了这个方法,它返回了相同的值

# dateToEpochForTimezone: 5_1_2020-> true = GMT+02:00, false = GMT+01:00
# dateToEpochForTimezone: 5_2_2020-> true = GMT+02:00, false = GMT+01:00
# dateToEpochForTimezone: 5_3_2020-> true = GMT+02:00, false = GMT+01:00
# dateToEpochForTimezone: 5_4_2020-> true = GMT+02:00, false = GMT+01:00
# dateToEpochForTimezone: 5_5_2020-> true = GMT+02:00, false = GMT+01:00
# dateToEpochForTimezone: 5_6_2020-> true = GMT+02:00, false = GMT+01:00
# dateToEpochForTimezone: 5_7_2020-> true = GMT+02:00, false = GMT+01:00
# dateToEpochForTimezone: 5_8_2020-> true = GMT+02:00, false = GMT+01:00
# dateToEpochForTimezone: 5_9_2020-> true = GMT+02:00, false = GMT+01:00
# dateToEpochForTimezone: 5_10_2020-> true = GMT+02:00, false = GMT+01:00
# dateToEpochForTimezone: 5_11_2020-> true = GMT+02:00, false = GMT+01:00
# dateToEpochForTimezone: 5_12_2020-> true = GMT+02:00, false = GMT+01:00
所以这个真/假参数是完全无用的。早在8月份夏令时处于活动状态时,传递true返回的时区是正确的,但现在在11月份夏令时不再处于活动状态时,它返回的值不正确

我的第一个想法是,如果夏令时的开始和结束时间在全球范围内是相同的,那么我可以硬编码。但从时间上看,不同国家和地区的开始和结束日期是不同的

那么我该如何解决这个问题呢?考虑到夏令时是开还是关,如何获取当前时区