2012-05-28 15 views
5

के साथ यूनिक्स समय को कनवर्ट करें मैं PowerShell SQLite मॉड्यूल का उपयोग कर SQLite डेटाबेस को पार्स कर रहा हूं, और कुछ रिटर्न मान बनाए और संशोधित किए गए हैं, जिनमें से दोनों यूनिक्स समय में हैं।PowerShell

मैं जो करना चाहता हूं वह किसी भी तरह से "मानव समय" में परिवर्तित होता है। मैंने आसानी से पढ़ने के लिए कुछ अन्य 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) 

उत्पादन यूनिक्स टाइमस्टैम्प का एक बड़ा स्तंभ की तरह दिखता है:

1337329458 

उत्तर

12

http://codeclimber.net.nz/archive/2007/07/10/convert-a-unix-timestamp-to-a-.net-datetime.aspx

आप आसानी से इस PowerShell में पुन: पेश कर सकते हैं ।

$origin = New-Object -Type DateTime -ArgumentList 1970, 1, 1, 0, 0, 0, 0 
$whatIWant = $origin.AddSeconds($unixTime) 

संपादित करें: क्षमा करें, गलतियों को सही किया गया है।

+5

'[datetime] $ मूल = '1970-01-01 00: 00: 00'' तरह ही काम करता है, और शायद –

+0

को समझने में थोड़ा आसान हो रहा है मुझे यह त्रुटि मिल रही है: कोई विचार? "0" के साथ तर्क "0" को परिवर्तित नहीं कर सकता: "", "AddSeconds" के लिए। कुछ मान "शून्य" हैं, जिसमें डेटाबेस में कुछ आइटम किसी निर्मित/संशोधित दिनांक को नहीं मानते हैं। मुझे लगता है कि यह वह जगह है जहां से त्रुटि आ रही है। – mrwh1t3

1
$ctime = $entry.created 
[datetime]$origin = '1970-01-01 00:00:00' 
$origin.AddSeconds($ctime) 
8
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. 
1

एक साधारण एक लाइनर:

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