Windows时间与Unix时间怎么转换

77次阅读
没有评论

共计 2295 个字符,预计需要花费 6 分钟才能阅读完成。

这篇文章主要介绍了 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

 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
   return datetime.datetime(1601, 1, 1) + datetime.timedelta(microseconds=nt_time//10)
 print(expire_time(6))  print(nt_2_unix(1.3281000774125e+17))

关于“Windows 时间与 Unix 时间怎么转换”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Windows 时间与 Unix 时间怎么转换”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-13发表,共计2295字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)