2015-08-12 2 views
-1

У меня есть datetime как строка, где я пытаюсь поместить его в объект DateTime. Я использовал Get-Culture, и я en-nz, который я хочу.преобразование моего времени в DateTime

Строка: 13/10/2014 02:13:02 p.m.

Я пробовал некоторые методы, такие как литье его к объекту DATETIME с [datetime], но это не похоже на работу.

Как я могу это сделать в powershell?

Редактировать: Я использую powershell, поэтому функции .NET могут работать.

Спасибо.

+0

В каких томах GE? C# или Powershell? – Blorgbeard

+0

Я использую powershell. –

ответ

1

Кастинг будет работать только в формате США или ISO-8601 в PowerShell. Подумайте о том, чтобы отличить строку до DateTime как своего рода DateTime буквально. Таким образом, в сценариях, которые могут сломаться (например, это обычное явление с пакетными файлами), не может быть никаких языковых зависимостей.

Как правило, если вы работаете со строками в определенной культуре, вам необходимо использовать [DateTime]::Parse и его аналоги (аналогично другим типам данных, таким как числа).

В этом случае, однако, похоже, en-nz неправильная культура для разбора это с так или иначе:

PS Home:\> [DateTime]::Parse('13/10/2014 02:13:02 p.m.', [cultureinfo]::GetCultureInfo('en-nz')) 
Exception calling "Parse" with "2" argument(s): "The string was not recognized as a valid DateTime. There is an 
unknown word starting at index 20." 
At line:1 char:1 
+ [DateTime]::Parse('13/10/2014 02:13:02 p.m.', [cultureinfo]::GetCultu ... 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : NotSpecified: (:) [], MethodInvocationException 
    + FullyQualifiedErrorId : FormatException 

Проблема заключается в p.m., которые лишь очень немногие культуры имеют:

PS Home:\> [cultureinfo]::GetCultures('AllCultures')|?{[DateTime]::Now.ToString($_) -match 'p\.m\.'} 

LCID    Name    DisplayName 
----    ----    ----------- 
112    ig    Igbo 
1136    ig-NG   Igbo (Nigeria) 
4096    luy    Luluhia 
4096    luy-KE   Luluhia (Kenya) 
129    mi    Maori 
1153    mi-NZ   Maori (New Zealand) 
134    quc    K'iche' 
31878   quc-Latn   K'iche' 
1158    quc-Latn-GT  K'iche' (Guatemala) 
107    quz    Quechua 
1131    quz-BO   Quechua (Bolivia) 
3179    quz-PE   Quechua (Peru) 

mi-NZ выглядит неплохо:

PS Home:\> [DateTime]::Parse('13/10/2014 02:13:02 p.m.', [cultureinfo]::GetCultureInfo('mi-nz')) 

Montag, 13. Oktober 2014 14:13:02 
+0

Это хорошо, но оно все еще выходит как 'понедельник, 13 октября 2014 года 2:13:02 вечера, вместо формата' 13/10/2014'. Есть ли способ сделать это, чтобы сохранить этот формат? –

+1

То, что напечатано, является только длинной формой объекта DateTime. Результат * - это фактически 'DateTime'. Этот формат для вашего удобства, что вы не видите '[System.DateTime]' или что-то подобное. Если вам нужен конкретный формат, вы можете использовать 'ToString' с строкой формата (и культурой, если необходимо):' $ d = [datetime] :: Parse ('13/10/2014 02:13:02 pm ', [CultureInfo] :: GetCultureInfo ('ми-пг')); $ D.ToString ([CultureInfo] :: GetCultureInfo ('ми-новозеландских')) '. – Joey

+0

Имейте в виду, что PowerShell обычно работает с объектами. Просто потому, что вы видите, что конкретный текст не означает, что это фактически строка. Если вам нужна строка, вам обычно нужно сделать ее самостоятельно. – Joey

Смежные вопросы