如何使用Kotlin获取GMT时间对应的星期几数值(周日计为1)
Kotlin 实现UTC时间自定义规则星期几数值获取
需求说明
获取GMT(UTC)时间对应的星期几数值,计数规则为:星期日=1,星期一=2,以此类推,星期五对应数值为6,星期六对应数值为7。
示例场景:UTC时间为2021年11月5日星期五 17:14:24时,期望输出结果为6。
JVM平台实现(基于Java 8+ Time API)
这是Kotlin服务端/Android开发最常用的实现方案,无需额外依赖:
import java.time.ZoneOffset import java.time.ZonedDateTime fun getUtcCustomWeekday(): Int { // 取当前UTC时间 val utcTime = ZonedDateTime.now(ZoneOffset.UTC) // 原生DayOfWeek.value为ISO标准:周一=1,周日=7 // 转换公式适配自定义规则 return (utcTime.dayOfWeek.value % 7) + 1 }
测试验证
用需求给出的示例时间做验证:
// 构造示例指定时间 val testUtcTime = ZonedDateTime.of(2021, 11, 5, 17, 14, 24, 0, ZoneOffset.UTC) val result = (testUtcTime.dayOfWeek.value % 7) + 1 println(result) // 输出 6,完全符合预期
Kotlin多平台实现(基于kotlinx-datetime)
如果是跨端开发场景,可以使用官方多平台时间库实现:
import kotlinx.datetime.Clock import kotlinx.datetime.TimeZone import kotlinx.datetime.toLocalDateTime fun getUtcCustomWeekdayMpp(): Int { val utcTime = Clock.System.now().toLocalDateTime(TimeZone.UTC) // isoDayNumber同样遵循ISO标准:周一=1,周日=7 return (utcTime.dayOfWeek.isoDayNumber % 7) + 1 }
注意事项
- 必须显式指定时区为UTC,禁止使用系统默认时区,避免时区偏移导致星期几计算错误
- 转换公式直接通过取模运算完成适配,无分支判断,边界兼容性更好,无需单独处理周日的特殊情况
内容的提问来源于stack exchange,提问作者Gokul Gadkar
相关产品推荐
相关产品推荐

