Вопрос по – Конвертировать время Unix с PowerShell

6

Я анализирую базу данных SQLite с помощью PowerShellSQLite модуль и пара возвращаемых значений создаются и модифицируются, оба из которых находятся во времени Unix.

То, что я хотел бы сделать, это как-то преобразовать это в «человеческое время». Я удалил некоторые другие запросы SQL для удобства чтения.

Import-Module SQLite
mount-sqlite -name GoogleDrive -dataSource E:\Programming\new.db
$cloud_entry = Get-ChildItem GoogleDrive:\cloud_entry

foreach ($entry in $cloud_entry)
{
    $entry.created
}

Я пошел со следующим:

$ctime = $entry.created
[datetime]$origin = '1970-01-01 00:00:00'
$origin.AddSeconds($ctime)

Вывод выглядит как большой столбец меток времени Unix:

1337329458

Ваш Ответ

6   ответов
12
Function Convert-FromUnixDate ($UnixDate) {
   [timezone]::CurrentTimeZone.ToLocalTime(([datetime]'1/1/1970').AddSeconds($UnixDate))
}

$niceTime = Convert-FromUnixDate $ctime

PS C:\> $niceTime

Friday, 18 May 2012 8:24:18 p.m.
6
$date = get-date "1/1/1970"
$date.AddSeconds($unixTime).ToLocalTime()
1
$ctime = $entry.created
[datetime]$origin = '1970-01-01 00:00:00'
$origin.AddSeconds($ctime)
3

Использование:

(([System.DateTimeOffset]::FromUnixTimeSeconds($unixTime)).DateTime).ToString("s")

FromUnixTimeMilliseconds также доступно.

ToString (& quot; s & quot;): сортируется:"The pattern reflects a defined standard (ISO 8601)"

Ref .:Стандартные строки формата даты и времени, спецификатор сортируемого (& quot; s & quot;) формата

Я чувствую себя глупо, зная, что в последние годы я использовал [System.DateTime] :: Parse ('1-1-1970) .AddSeconds ($ epoch) вместо DateTimeOffset
Не беспокойтесь, похоже, что этот метод является новым с .net 4.6!
19

УвидетьПреобразование метки времени Unix в .NET DateTime.

Вы можете легко воспроизвести это в PowerShell.

$origin = New-Object -Type DateTime -ArgumentList 1970, 1, 1, 0, 0, 0, 0
$whatIWant = $origin.AddSeconds($unixTime)
Я получаю эту ошибку: есть идеи? Невозможно преобразовать аргумент «0», со значением: «quot;» для «AddSeconds». Некоторые значения являются «нулевыми», поскольку некоторым элементам в базе данных не назначена дата создания / изменения. Я предполагаю, что именно отсюда и происходит эта ошибка. mrwh1t3
[datetime]$origin = '1970-01-01 00:00:00' работает так же хорошо, и, возможно, немного легче понять
4

Простой однострочник:

(Get-Date "1970-01-01 00:00:00.000Z") + ([TimeSpan]::FromSeconds($unixTime))

Похожие вопросы