Estou tentando mudar meu ambiente com o Powershell para que a hora seja exibida no formato de 24 horas sem AM/PM.
Isto é o que eu faço:
$culture = get-culture
$culture.DateTimeFormat.ShortTimePattern = 'HH:mm'
$culture.DateTimeFormat.pmDesignator = ''
set-culture $culture
Isso elimina o designador AM/PM, mas ainda exibe as horas na faixa 0..12 em vez da faixa esperada de 0..23. Então, o que eu preciso para ter as horas exibidas no formato de 24 horas?
TL;DR : O formato de hora curta da localidade do usuário no sistema é armazenado na chave de registro
HKCU:\Control Panel\International
no valorsShortTime
. Você pode editar os dados desse valor pelo seguinte comando do PowerShell:A alteração ficará visível após as atualizações da interface do usuário, por exemplo, quando passar um minuto. Você também pode alterar
sTimeFormat
, pois corresponde àLongTimePattern
propriedade.Set-Culture
é projetado para definir/carregar objetos predefinidos daCultureInfo
classe. Você normalmente usa assim:Se você recuperar um
CultureInfo
objeto e alterar suas propriedades, não criará um novoCultureInfo
objeto. Especialmente ainda tem o nome de umCultureInfo
objeto predefinido (por exemploen-US
, ).CultureInfo
Se você usar um objeto modificado comSet-Culture
, acho que o comportamento é indefinido (não tenho certeza). Você pode ver que ele aceita substituir aLongTimePattern
propriedade, mas não aShortTimePattern
propriedade. Não sei se isso é um bug ou apenas indefinido.No entanto, você pode definir seu próprio
CultureInfo
objeto personalizado, derivá-lo de um objeto predefinido e usá-lo em seu sistema. Você pode ler mais sobre isso aqui . Um exemplo de implementação em C# é mostrado aqui . Você pode traduzir isso para o PowerShell da seguinte maneira (executá-lo com privilégios administrativos):Depois disso, você tem um
CultureInfo
objeto personalizado - nomeadoen-US-Custom
- disponível em seu sistema e pode configurá-lo com:Se você deseja excluir seu
CultureInfo
objeto personalizado, pode fazer assim:Agora você pode decidir se deseja definir um
CultureInfo
objeto personalizado ou apenas alterar um ou dois valores no registro. No seu caso, recomendo alterar o registro, pois é exatamente isso que acontece quando você altera o padrão de tempo curto na GUI: