如何在kotlin中计算给定格式的日期?



如何查看用户在2个日期之间是否可以被解禁?

嗨,我有一个给定的变量,它是用户作为end_banned被解禁的日期,格式为HH:mm:ss dd/MM/YYYY

val end_banned: String= "15:05:00 12/01/2022"

我想计算一下当前它们是否可以被解禁。我已经尝试了SimpleDateFormat, Calendar, Date...,但仍然没有找到解决方案。

  1. 我已经尝试分离seconds, minutes, days...的每个元素并将它们与如果进行比较…
var cal = Calendar.getInstance()
cal.timeZone = TimeZone.getTimeZone("Asia/Ho_Chi_Minh")
var _hours = cal.get(Calendar.HOUR)
var _minutes = cal.get(Calendar.MINUTE)
var _seconds = cal.get(Calendar.SECOND)
var _day = cal.get(Calendar.DAY_OF_MONTH)
var _month = cal.get(Calendar.MONTH) + 1
var _year = cal.get(Calendar.YEAR)
var hours = end_banned.toString().substring(0, 2).toInt()
var minutes = end_banned.toString().substring(3, 5).toInt()
var seconds = end_banned.toString().substring(6, 8).toInt()
var day = end_banned.toString().substring(9, 11).toInt()
var month = end_banned.toString().substring(12, 14).toInt()
var year = end_banned.toString().substring(15).toInt()
if (_year >= year && _month >= month && _day >= day && _hours >= hours && _minutes >= minutes && _seconds >= seconds
|| _year >= year && _month >= month && _day >= day && _hours >= hours && _minutes >= minutes
|| _year >= year && _month >= month && _day >= day && _hours >= hours
|| _year >= year && _month >= month && _day >= day
|| _year >= year && _month >= month
|| _year >= year) {
println("True")
} else {
println("False")
}

但它只对前三个条件成立,当有小时、分和秒时。

  1. 我尝试使用SimpleDateFormat和Date:
var cal = Calendar.getInstance()
cal.timeZone = TimeZone.getTimeZone("Asia/Ho_Chi_Minh")
var hours = cal.get(Calendar.HOUR)
var minutes = cal.get(Calendar.MINUTE)
var seconds = cal.get(Calendar.SECOND)
var day = cal.get(Calendar.DAY_OF_MONTH)
var month = cal.get(Calendar.MONTH) + 1
var year = cal.get(Calendar.YEAR)
var sdf = SimpleDateFormat("HH:mm:ss dd/MM/yyyy")
var sdf_unbanned = sdf.parse(end_banned)
var sdf_now = sdf.parse("${hours}:${minutes}:${seconds} ${day}/${month}/${year}")
if (sdf_now.time - sdf_unbanned.time <= 0) {
println(true)
} else {
println(false)
}

但是这个条件总是给出一个不正确的数字,如果我调整现在和未禁止的变量几分钟(这使它更容易发现)

我没有完全理解你的问题,但是我假设你想比较unbanned_date和当前日期(现在的时间),如果它们是相同的(我们达到了unban日期),那么它应该unban你正在unban的任何东西,如果是这样,实现需要更少的代码来实现,像这样:

val sdf = SimpleDateFormat("dd/MM/yyyy")
val strDate: Date = sdf.parse(end_banned)
if (System.currentTimeMillis() > strDate.getTime()) {
urbanUser = true // or what ever your logic is 
} 

不好意思,我把cal.get(Calendar.HOUR)cal.get(Calendar.HOUR_OF_DAY)搞混了

因为cal.get(Calendar.HOUR)只返回12h格式
cal.get(Calendar.HOUR_OF_DAY)将返回24h格式

我找到了一个解决方案,下面是我修复和测试的代码:

var cal = Calendar.getInstance()
cal.timeZone = TimeZone.getTimeZone("Asia/Ho_Chi_Minh")
var sdf = SimpleDateFormat("HH:mm:ss dd/MM/yyyy")
var hour = cal.get(Calendar.HOUR_OF_DAY)
var minute = cal.get(Calendar.MINUTE)
var second = cal.get(Calendar.SECOND)
var day = cal.get(Calendar.DAY_OF_MONTH)
var month = cal.get(Calendar.MONTH) + 1
var year = cal.get(Calendar.YEAR)
var now: Date? = sdf.parse("${hour}:${minute}:${second} ${day}/${month}/${year}")
var end: Date? = sdf.parse(end_banned)
return now?.time!! > end?.time!!

谢谢你的帮助。

最新更新