tech.guitarrapc.cóm

Technical updates

Windows の TimeZone 設定をコマンドラインから行う

Windows の TimeZone 設定といえば コマンドプロンプト以外にも PowerShell や .NETでもできます。

Windows 10 でどのようなやり方があるのか軽く見てみましょう。

目次

各種方法

ざっくり見てみます。

コマンドプロンプト

TZutil が安定でしょうか。

Tzutil Command-Line Options | Microsoft Learn

書式が相変わらずめんどくさいです。

TZUTIL </? | /g | /l | /s TimeZoneValue[_dstoff]>

今のタイムゾーンを取得したり、タイムゾーンの一覧取得、設定が可能です。

gist.github.com

PowerShell

Powershell 5.0 から Microsoft.PowerShell.Management モジュールに Timezone に関する Cmdlet が2つ追加されました。Get と Set です。

PS > man Get-TimeZone

NAME
    Get-TimeZone

SYNTAX
    Get-TimeZone [[-Name] <string[]>]  [<CommonParameters>]

    Get-TimeZone -Id <string[]>  [<CommonParameters>]

    Get-TimeZone -ListAvailable  [<CommonParameters>]


ALIASES
    gtz


REMARKS
    Get-Help cannot find the Help files for this cmdlet on this computer. It is displaying only partial help.
        -- To download and install Help files for the module that includes this cmdlet, use Update-Help.
        -- To view the Help topic for this cmdlet online, type: "Get-Help Get-TimeZone -Online" or
           go to https://go.microsoft.com/fwlink/?LinkId=799468.

使い方も簡単です。Get-TimeZoneで今のタイムゾーン取得、Get-TimeZone -ListAvailable で一覧取得、Set-TimeZone で設定。まんまですね。

gist.github.com

ちなみに PowerShell DSC でも可能です。まだリリースされてませんが、1.6 でWMF5.1 や Nano Server 向けに TimeZone Cmdlet を使うように分岐が入ります。

github.com

gist.github.com

.NET (C#)

当然 C# でも操作できます。 Set がだるいので、コマンドをラップしてもいいかもしれません。

gist.github.com

WSL (Bash on Ubuntu on Windows)

WSL から UbuntuでやるようにはSETがちょっとうまくいかないのでどうすればいいですかねぇ。

手元の bash で sudo 壊れて直してないので試してませんが、ln 置き換えでいい気がします。 gist.github.com

2017/6/21 追記

記事を見た先輩から教えていただきました。

Ubuntu のヘルプ通り、本来ならこれで行けます

UbuntuTime - Community Help Wiki

gist.github.com

しかし、現在バグがあらいます。

bugs.launchpad.net

修正までは以下でいいようです。

gist.github.com

まとめ

どれを使ってもいいでしょう。この程度だと PowerShell が一番楽、かな?