我正在尝试使用 Powershell 更改我的环境,以便在没有 AM/PM 的情况下以 24 小时格式显示时间。
这就是我所做的:
$culture = get-culture
$culture.DateTimeFormat.ShortTimePattern = 'HH:mm'
$culture.DateTimeFormat.pmDesignator = ''
set-culture $culture
这消除了 AM/PM 指示符,但仍显示 0..12 范围内的小时数,而不是预期的 0..23 范围内。那么我需要做什么才能以 24 小时格式显示小时数?
TL;DR:系统上用户区域设置的短时间格式存储在
HKCU:\Control Panel\International
值中的注册表项下sShortTime
。您可以通过以下 PowerShell 命令编辑此值的数据:在 UI 更新后,更改将可见,例如一分钟过去后。您可能也想更改
sTimeFormat
,因为它对应于LongTimePattern
属性。Set-Culture
旨在设置/加载CultureInfo
类的预定义对象。你通常这样使用它:如果检索
CultureInfo
对象然后更改其属性,则不会创建新CultureInfo
对象。它尤其仍然具有预定义CultureInfo
对象的名称(例如en-US
)。如果您将这样的修改CultureInfo
对象与 一起使用Set-Culture
,我认为该行为是未定义的(我不确定)。您可以看到它接受覆盖该LongTimePattern
属性,但不接受该ShortTimePattern
属性。我不知道这是一个错误还是只是未定义。不过,您可以定义自己的自定义
CultureInfo
对象,从预定义的对象派生它,然后在您的系统上使用它。您可以在此处阅读更多相关信息。此处显示了 C# 中的示例实现。您可以将其转换为 PowerShell,如下所示(以管理权限执行):之后,您的系统上有一个自定义
CultureInfo
对象 - 命名en-US-Custom
- 可用,您可以设置它:如果要删除自定义
CultureInfo
对象,可以这样做:现在您可以决定是要定义自定义
CultureInfo
对象还是只更改注册表中的一两个值。在您的情况下,我建议更改注册表,因为这正是您在 GUI 中更改短时间模式时发生的情况: