国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

golang-Windows 設(shè)置系統(tǒng)本地時(shí)間

這篇具有很好參考價(jià)值的文章主要介紹了golang-Windows 設(shè)置系統(tǒng)本地時(shí)間。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

golang 調(diào)用win32api 對(duì)windows系統(tǒng)時(shí)間進(jìn)行調(diào)用,主要參考的是微軟的win32api文檔,根據(jù)官方文檔,有兩者設(shè)置方式:
setlocaltime:設(shè)置當(dāng)前的本地時(shí)間和日期。https://learn.microsoft.com/en-us/windows/win32/api/sysinfoapi/nf-sysinfoapi-setlocaltime
setsystemtime:設(shè)置當(dāng)前系統(tǒng)時(shí)間和日期。系統(tǒng)時(shí)間以協(xié)調(diào)世界時(shí) (UTC) 表示https://learn.microsoft.com/en-us/windows/win32/api/sysinfoapi/nf-sysinfoapi-setsystemtime

// 根據(jù)官方文檔中的描述,setlocaltime 需要傳一個(gè)輸入?yún)?shù),該參數(shù)是一個(gè)名為SYSTEMTIME的指針結(jié)構(gòu)體
BOOL SetLocalTime(
  [in] const SYSTEMTIME *lpSystemTime
);

// SYSTEMTIME 定義:
typedef struct _SYSTEMTIME {
  WORD wYear;
  WORD wMonth;
  WORD wDayOfWeek;
  WORD wDay;
  WORD wHour;
  WORD wMinute;
  WORD wSecond;
  WORD wMilliseconds;
} SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;

// word 類型在golang 里面可以看作是 uint16
// SetLocalTime的返回值,如果設(shè)置成功,則返回值不是0,反之則為0

golang 調(diào)用win32api的方式 是通過?syscall 庫去調(diào)用相應(yīng)的 windows .dll 文件,根據(jù)上述文檔描述,兩個(gè)接口都是存在于?Kernel32.dll 這個(gè)文件當(dāng)中,因此我們可以使用如下代碼去實(shí)現(xiàn)調(diào)用接口:

dll2 := syscall.NewLazyDLL("kernel32.dll")
proc := dll2.NewProc("SetLocalTime")

具體實(shí)現(xiàn)方式如下:?

// 定義對(duì)應(yīng)的結(jié)構(gòu)體
type SYSTEMTIME struct {
	WYear         uint16
	WMonth        uint16
	WDayOfWeek    uint16
	WDay          uint16
	WHour         uint16
	WMinute       uint16
	WSecond       uint16
	WMilliseconds uint16
}

// 設(shè)置本地系統(tǒng)時(shí)間
func SetLocalTime(year, month, day, hour, minute, seconds uint16) error {
	s := SYSTEMTIME{
		WYear: year, WMonth: month, WDay: day, WHour: hour, WMinute: minute, WSecond: seconds,
	}
	fmt.Println("s", s)
	dll2 := syscall.NewLazyDLL("kernel32.dll")
	proc := dll2.NewProc("SetLocalTime")
    // 調(diào)用接口,傳參
	r, _, err := proc.Call(uintptr(unsafe.Pointer(&s)))
	if r <= 0 {
		return err
	} else {
		return nil
	}
}

最后執(zhí)行的話,需要在使用管理員權(quán)限在cmd 中執(zhí)行才會(huì)成功.

下面是關(guān)于輸入時(shí)間格式的一個(gè)校驗(yàn),因?yàn)槭褂?SetLocalTime,對(duì)于輸入時(shí)間系統(tǒng)不會(huì)做過多校驗(yàn).我代碼主要框架是gin.就不做過多修改了文章來源地址http://www.zghlxwxcb.cn/news/detail-770633.html

func setTime(c *gin.Context) {
	var t struct {
		Year    uint16 `json:"year"`
		Month   uint16 `json:"month"`
		Day     uint16 `json:"day"`
		Hour    uint16 `json:"hour"`
		Minute  uint16 `json:"minute"`
		Seconds uint16 `json:"seconds"`
	}
	err := c.Bind(&t)
	if err != nil {
		c.JSON(200, utils.Returns(utils.ParamErr, err.Error(), c, nil, nil))
		return
	}
	msg := []string{}
	monthMap := map[uint16]string{
		1: "Jan", 2: "Feb", 3: "Mar", 4: "Apr", 5: "May", 6: "Jun", 7: "Jul",
		8: "Aug", 9: "Sep", 10: "Oct", 11: "Nov", 12: "Dec",
	}
	if t.Year < 1601 || t.Year > 30827 {
		msg = append(msg, "year range is from 1601 to 30827")
	}
	switch t.Month {
	case 1:
	case 3:
	case 5:
	case 7:
	case 8:
	case 10:
	case 12:
		if t.Day < 1 || t.Day > 31 {
			msg = append(msg, fmt.Sprintf("%d/%s of days range is from 1 to 31", t.Year, monthMap[t.Month]))
		}
	case 2:
		if t.Year%4 == 0 && t.Year%100 != 0 || t.Year%400 == 0 { // 閏年
			if t.Day < 1 || t.Day > 29 {
				msg = append(msg, fmt.Sprintf("%d/%s of days range is from 1 to 29", t.Year, monthMap[t.Month]))
			}
		} else { // 平年
			if t.Day < 1 || t.Day > 28 {
				msg = append(msg, fmt.Sprintf("%d/%s of days range is from 1 to 28", t.Year, monthMap[t.Month]))
			}
		}
	case 4:
	case 6:
	case 9:
	case 11:
		if t.Day < 1 || t.Day > 30 {
			msg = append(msg, fmt.Sprintf("%d/%s of days is ranges 1-30", t.Year, monthMap[t.Month]))
		}
	default:
		msg = append(msg, "month range is from 1 to 12")
	}
	if t.Hour < 0 || t.Hour > 59 {
		msg = append(msg, "hour range is from 0 to 59")
	}
	if t.Minute < 0 || t.Minute > 59 {
		msg = append(msg, "minute range is from 0 to 59")
	}
	if t.Seconds < 0 || t.Seconds > 59 {
		msg = append(msg, "seconds range is from  0 to 59")
	}
	if len(msg) > 0 {
		c.JSON(200, utils.Returns(utils.TimeRangeErr, strings.Join(msg, ","), c, nil, nil))
		return
	}
	err = utils.SetLocalTime(t.Year, t.Month, t.Day, t.Hour, t.Minute, t.Seconds)
	if err != nil {
		c.JSON(200, utils.Returns(utils.UpdateErr, err.Error(), c, nil, nil))
		return
	}
	c.JSON(200, utils.Returns(utils.Succ, "", c, nil, nil))
}

到了這里,關(guān)于golang-Windows 設(shè)置系統(tǒng)本地時(shí)間的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • python,如何設(shè)置定時(shí)執(zhí)行python代碼-windows本地

    python,如何設(shè)置定時(shí)執(zhí)行python代碼-windows本地

    最近寫了一個(gè)python小程序,希望能每天定時(shí)執(zhí)行,但是又不想用jenkins這樣的工具,后來發(fā)現(xiàn)windows本地就可以設(shè)置,而且很好用,具體步驟如下: 首先,需確保本地python代碼已編寫好,環(huán)境變量已配置好,能運(yùn)行成功; 1)依次進(jìn)入:控制面板-大圖標(biāo)-管理工具-任務(wù)計(jì)劃程序

    2024年02月10日
    瀏覽(26)
  • Linux 操作系統(tǒng)——查看/修改系統(tǒng)時(shí)區(qū)、時(shí)間、本地時(shí)間修改為UTC

    Linux 操作系統(tǒng)——查看/修改系統(tǒng)時(shí)區(qū)、時(shí)間、本地時(shí)間修改為UTC

    最近一個(gè)項(xiàng)目日期采用java8的LocalDate 和 LocalDateTime ,在本地windows 下運(yùn)行,日期沒有問題,但是當(dāng)部署到linux 系統(tǒng)上時(shí),相差8 小時(shí),第一時(shí)間想到時(shí)linux 服務(wù)器日期和時(shí)間設(shè)置的問題。果斷登陸linux 服務(wù)器查看。 GMT(Greenwich Mean Time,格林威治標(biāo)準(zhǔn)時(shí)間): 是指位于英國倫敦郊區(qū)

    2024年02月07日
    瀏覽(20)
  • (Windows )本地連接遠(yuǎn)程服務(wù)器(Linux),免密碼登錄設(shè)置

    (Windows )本地連接遠(yuǎn)程服務(wù)器(Linux),免密碼登錄設(shè)置

    在使用VScode連接遠(yuǎn)程服務(wù)器時(shí),每次打開都要輸入密碼,以及使用ssh登錄或其它方法登錄,都要本地輸入密碼,這大大降低了使用感受,下面總結(jié)了免密碼登錄的方法,用起來巴適得很,起飛。 本地必須在PowerShell終端操控,如下: 打開終端后在終端輸入以下命令: 回車再回

    2024年02月11日
    瀏覽(30)
  • CentOS 設(shè)置系統(tǒng)時(shí)間與網(wǎng)絡(luò)時(shí)間同步

    CentOS 設(shè)置系統(tǒng)時(shí)間與網(wǎng)絡(luò)時(shí)間同步

    一、Linux的時(shí)間分為(兩種) System Clock(系統(tǒng)時(shí)間) 指當(dāng)前Linux Kernel中的時(shí)間 Real Time Clock (硬件時(shí)間,簡(jiǎn)稱RTC) 主板上有電池供電的時(shí)間 二、查看系統(tǒng)時(shí)間的命令 系統(tǒng)時(shí)間指令: # date 設(shè)置系統(tǒng)時(shí)間的命令 三、查看硬件時(shí)間的命令: 硬件命令: # hwclock 設(shè)置硬件時(shí)間的命

    2024年03月09日
    瀏覽(17)
  • Python 使用http時(shí)間同步設(shè)置系統(tǒng)時(shí)間源碼

    Python 方式實(shí)現(xiàn)使用http時(shí)間同步設(shè)置系統(tǒng)時(shí)間源碼,系統(tǒng)環(huán)境是ubuntu 12.04、Python2.7版本。需要使用到time、os及httplib方法。 Python使用http時(shí)間同步設(shè)置系統(tǒng)時(shí)間,源碼如下:

    2024年02月15日
    瀏覽(12)
  • adb - 設(shè)置系統(tǒng)時(shí)間

    adb - 設(shè)置系統(tǒng)時(shí)間

    app中添加系統(tǒng)定時(shí)重啟功能,但是等待時(shí)間過久,故通過 adb 直接設(shè)置系統(tǒng)時(shí)間,方便驗(yàn)證功能。記錄過程如下: 1、adb shell ????????進(jìn)入終端 2、su?? ? ? ? ? 獲取 root 權(quán)限 3、settings put global auto_time 0 ? ? ? ? 關(guān)掉自動(dòng)時(shí)間同步 4、 settings?put?global?auto_time_zone? ? ? ?

    2024年04月26日
    瀏覽(19)
  • windows10下設(shè)置本地apache\nginx站點(diǎn)部署ssl證書,使本地配置的域名可以用https訪問

    windows10下設(shè)置本地apache\nginx站點(diǎn)部署ssl證書,使本地配置的域名可以用https訪問

    首先我們需要下載openssl來生成證書文件: 去官方網(wǎng)址下載https://slproweb.com/products/Win32OpenSSL.html; 下載好了,雙擊exe文件,然后就下一步,下一步安裝完成; 安裝之后配置環(huán)境變量,新建一個(gè)系統(tǒng)變量OPENSSL_HOME,值就是你安裝目錄下的bin,然后在系統(tǒng)變量path,增加%OPENSSL_HO

    2024年02月15日
    瀏覽(22)
  • CentOS 7 設(shè)置系統(tǒng)時(shí)間的方法

    CentOS 7 設(shè)置系統(tǒng)時(shí)間的方法分享。 一、設(shè)置系統(tǒng)時(shí)間為中國時(shí)區(qū)并啟用NTP同步 二、硬件時(shí)鐘和系統(tǒng)時(shí)鐘 1、 硬件時(shí)鐘 RTC(Real-Time Clock)或CMOS時(shí)鐘,一般在主板上靠電池供電,服務(wù)器斷電后也會(huì)繼續(xù)運(yùn)行。僅保存日期時(shí)間數(shù)值,無法保存時(shí)區(qū)和夏令時(shí)設(shè)置。 2、系統(tǒng)時(shí)鐘 一般在

    2024年02月11日
    瀏覽(24)
  • 部署問題集合(二十二)Linux設(shè)置定時(shí)任務(wù),并設(shè)置系統(tǒng)時(shí)間

    部署問題集合(二十二)Linux設(shè)置定時(shí)任務(wù),并設(shè)置系統(tǒng)時(shí)間

    因?yàn)轫?xiàng)目中經(jīng)常用到定時(shí)任務(wù),特此總結(jié)記錄一下 大部分虛擬機(jī)創(chuàng)建后就自帶定時(shí)服務(wù),直接用命令就好 編輯定時(shí)任務(wù): crontab -e ,在該文件下添加如下內(nèi)容 開機(jī)自啟: @reboot /home/autoRun.sh 定時(shí)執(zhí)行: 0 0 * * * /home/sutoRun.sh (凌晨十二點(diǎn)執(zhí)行) 時(shí)間后也可以接命令 若要在該

    2024年02月11日
    瀏覽(23)
  • 【嵌入式開發(fā)】開發(fā)板設(shè)置系統(tǒng)時(shí)間

    【嵌入式開發(fā)】開發(fā)板設(shè)置系統(tǒng)時(shí)間

    時(shí)鐘包括硬件時(shí)鐘和系統(tǒng)時(shí)鐘,系統(tǒng)時(shí)鐘就是linux系統(tǒng)顯示的時(shí)間,用命令 date 可以顯示當(dāng)前系統(tǒng)時(shí)間;硬件時(shí)鐘就是硬件自身的時(shí)間了。它們兩者沒有關(guān)系的,但是可以通過命令設(shè)置系統(tǒng)時(shí)鐘和硬件設(shè)置,讓它們同步。 Linux系統(tǒng)ARM架構(gòu)開發(fā)板、Xshell軟件 date 命令查看系統(tǒng)時(shí)

    2024年02月11日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包