Windows时间与Unix时间怎么转换
这篇文章主要介绍了Windows时间与Unix时间怎么转换的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Windows时间与Unix时间怎么转换文章都会有所收获,下面我们一起来看看吧。
首先,我们在读取并解析用ldap协议查询出来的AD域用户账号过期时间,将Window NT转换为Unix时间;
其次,在创建用户的时候,根据提交的工单信息,需要为新账号指定一个过期时间,将当前Unix时间加上几个月的过期时间,赋值给accountExpires
;
最后,当有账号已经过期,使用不了的时候,用户会提交账号重新激活工单,自动为该账号续期;【一:账号正常过期,续6个月之类的; 二:重复提交创建账号申请,不处理发企业微信通知告知已经有账号了,告知对方账号创建和最后修改时间,让对方查看企业微信消息/邮件,如果没有找到账号密码消息,请直接提交密码找回工单(将收到账号和新密码)】
golang原生time包的Duration时间段
仅仅支持最大为290年的时间段,而windows nt时间为1601年开始,到现今是420多年,根本无法适配,在不采用第三方库的情况下该如何处理呢? 犯迷糊了,怎么将unix时间转换为nt时间,则反过来计算只需要计算出正确的unix时间戳然后将时间戳转换为时间类型即可。
// maxDuration Duration = 1<<63 - 1
fmt.Println(time.Duration(1<<63 - 1))
2562047h57m16.854775807s
292.47111872146 年
Window NT 时间转换为 Unix 时间
// Window NT 时间转换为 Unix 时间
func NtToUnix(ntTime int64) (unixTime time.Time) {
ntTime = (ntTime - 1.1644473600125e+17) / 1e+7
return time.Unix(int64(ntTime), 0)
}
测试
func TestNtTimeToDatetime(t *testing.T) {
// 取当前时间转换为nt时间
timestamp := time.Now().Unix()*1e+7 + 1.1644473600125e+17
fmt.Println(timestamp)
// 将nt时间转换为unix时间
res := NtToUnix(timestamp)
fmt.Println(res)
}
Unix 时间转换为 Window NT 时间
// Unix 时间转换为 Window NT 时间
func UnixToNt(expireTime time.Time) (ntTimestamp int64) {
ntTimestamp = expireTime.Unix()*int64(1e+7) + int64(1.1644473600125e+17)
return
}
测试
func TestUnixTimeToNtTime(t *testing.T) {
// 当前时间
unixTime := time.Now()
// 当前时间往后推迟6个月
unixTime.AddDate(0, 6, 0)
res := UnixToNt(unixTime)
fmt.Println(res)
}
用户过期期限处理
// 用户过期期限处理 月份为-1 则过期时间为永久;否则 当前时间往后推迟expireMouths个月
func expireTime(expireMouths int64) (expireTimestamp int64) {
expireTimestamp = 9223372036854775807
if expireMouths != -1 {
expireTimestamp = util.UnixToNt(time.Now().AddDate(0, int(expireMouths), 0))
}
return
}
python中的写法
import datetime
import time
from dateutil.relativedelta import relativedelta
def expire_time(expire_mouths: int) -> int:
'''用户账号过期逻辑
'''
expire_timestamp = 9223372036854775807
if expire_mouths != -1:
expire_timestamp = unix_2_nt(
datetime.datetime.now() + relativedelta(months=expire_mouths))
return expire_timestamp
def unix_2_nt(expire_time: datetime) -> int:
'''Unix 时间转换为 Window NT 时间
'''
return time.mktime(expire_time.timetuple()) * 1e+7 + 1.1644473600125e+17
def nt_2_unix(nt_time):
'''winows时间转换为unix时间
'''
return datetime.datetime(1601, 1, 1) + datetime.timedelta(microseconds=nt_time//10)
if __name__ == '__main__':
print(expire_time(6))
print(nt_2_unix(1.3281000774125e+17))
关于“Windows时间与Unix时间怎么转换”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Windows时间与Unix时间怎么转换”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网服务器栏目。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341