這篇文章主要介紹了Windows時(shí)間與Unix時(shí)間怎么轉(zhuǎn)換的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇Windows時(shí)間與Unix時(shí)間怎么轉(zhuǎn)換文章都會(huì)有所收獲,下面我們一起來看看吧。
創(chuàng)新互聯(lián)公司是一家以重慶網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)、品牌設(shè)計(jì)、軟件運(yùn)維、成都網(wǎng)站推廣、小程序App開發(fā)等移動(dòng)開發(fā)為一體互聯(lián)網(wǎng)公司。已累計(jì)為PE包裝袋等眾行業(yè)中小客戶提供優(yōu)質(zhì)的互聯(lián)網(wǎng)建站和軟件開發(fā)服務(wù)。
首先,我們?cè)谧x取并解析用ldap協(xié)議查詢出來的AD域用戶賬號(hào)過期時(shí)間,將Window NT轉(zhuǎn)換為Unix時(shí)間;
其次,在創(chuàng)建用戶的時(shí)候,根據(jù)提交的工單信息,需要為新賬號(hào)指定一個(gè)過期時(shí)間,將當(dāng)前Unix時(shí)間加上幾個(gè)月的過期時(shí)間,賦值給accountExpires
;
最后,當(dāng)有賬號(hào)已經(jīng)過期,使用不了的時(shí)候,用戶會(huì)提交賬號(hào)重新激活工單,自動(dòng)為該賬號(hào)續(xù)期;【一:賬號(hào)正常過期,續(xù)6個(gè)月之類的; 二:重復(fù)提交創(chuàng)建賬號(hào)申請(qǐng),不處理發(fā)企業(yè)微信通知告知已經(jīng)有賬號(hào)了,告知對(duì)方賬號(hào)創(chuàng)建和最后修改時(shí)間,讓對(duì)方查看企業(yè)微信消息/郵件,如果沒有找到賬號(hào)密碼消息,請(qǐng)直接提交密碼找回工單(將收到賬號(hào)和新密碼)】
僅僅支持最大為290年的時(shí)間段,而windows nt時(shí)間為1601年開始,到現(xiàn)今是420多年,根本無法適配,在不采用第三方庫的情況下該如何處理呢? 犯迷糊了,怎么將unix時(shí)間轉(zhuǎn)換為nt時(shí)間,則反過來計(jì)算只需要計(jì)算出正確的unix時(shí)間戳然后將時(shí)間戳轉(zhuǎn)換為時(shí)間類型即可。
// maxDuration Duration = 1<<63 - 1 fmt.Println(time.Duration(1<<63 - 1)) 2562047h57m16.854775807s 292.47111872146 年
// Window NT 時(shí)間轉(zhuǎn)換為 Unix 時(shí)間 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) { // 取當(dāng)前時(shí)間轉(zhuǎn)換為nt時(shí)間 timestamp := time.Now().Unix()*1e+7 + 1.1644473600125e+17 fmt.Println(timestamp) // 將nt時(shí)間轉(zhuǎn)換為unix時(shí)間 res := NtToUnix(timestamp) fmt.Println(res) }
// Unix 時(shí)間轉(zhuǎn)換為 Window NT 時(shí)間 func UnixToNt(expireTime time.Time) (ntTimestamp int64) { ntTimestamp = expireTime.Unix()*int64(1e+7) + int64(1.1644473600125e+17) return }
測試
func TestUnixTimeToNtTime(t *testing.T) { // 當(dāng)前時(shí)間 unixTime := time.Now() // 當(dāng)前時(shí)間往后推遲6個(gè)月 unixTime.AddDate(0, 6, 0) res := UnixToNt(unixTime) fmt.Println(res) }
// 用戶過期期限處理 月份為-1 則過期時(shí)間為永久;否則 當(dāng)前時(shí)間往后推遲expireMouths個(gè)月 func expireTime(expireMouths int64) (expireTimestamp int64) { expireTimestamp = 9223372036854775807 if expireMouths != -1 { expireTimestamp = util.UnixToNt(time.Now().AddDate(0, int(expireMouths), 0)) } return }
import datetime import time from dateutil.relativedelta import relativedelta def expire_time(expire_mouths: int) -> int: '''用戶賬號(hào)過期邏輯 ''' 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 時(shí)間轉(zhuǎn)換為 Window NT 時(shí)間 ''' return time.mktime(expire_time.timetuple()) * 1e+7 + 1.1644473600125e+17 def nt_2_unix(nt_time): '''winows時(shí)間轉(zhuǎn)換為unix時(shí)間 ''' 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))
關(guān)于“Windows時(shí)間與Unix時(shí)間怎么轉(zhuǎn)換”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“Windows時(shí)間與Unix時(shí)間怎么轉(zhuǎn)換”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。