Преобразование 20130420151740.000000+120 в DateTime

PowerShell Get-WMIObject возвращает поля DateTime в виде строк: 20130420151740.000000+120

Введите в PowerShell следующую команду:

Get-WMIObject -Class Win32_OperatingSystem | select -Property InstallDate | Get-Member

Вы получите такой результат:

TypeName: Selected.System.Management.ManagementObject

Name        MemberType   Definition                                  
----        ----------   ----------                                  
Equals      Method       bool Equals(System.Object obj)              
GetHashCode Method       int GetHashCode()                           
GetType     Method       type GetType()                              
ToString    Method       string ToString()                           
InstallDate NoteProperty string InstallDate=20160331115110.000000+120

В программе на C# мне нужно конвертировать такие строки. Что это за формат?? Это выглядит как Double плюс смещение UTC в минутах. Обычно это отображается как 2013-04-20 15:17:40 +2:00,

Как я могу преобразовать его в C# в тип C# DateTime? Вещи как

string stringdate = "20160331115110.000000+120";
var date = Convert.ToDateTime(stringdate);

или же

string stringdate = "20160331115110.000000+120";
var date = DateTime.Parse(stringdate);

не работает Они бросают System.FormatException exception говоря:

Сообщение = Строка не была распознана как допустимый DateTime.

1 ответ

Решение

Для этого формата есть ManagementDateTimeConverter.ToDateTime. Вы можете назвать это так:

using System.Management;
[...]
string stringdate = "20160331115110.000000+120";
DateTime dt = ManagementDateTimeConverter.ToDateTime(stringdate);
Другие вопросы по тегам