2012-05-07 11 views
18

में एक विशिष्ट यूटीसी डेटटाइम के साथ डेटटाइम ऑब्जेक्ट बनाना, मैं PowerShell में एक विशिष्ट यूटीसी टाइमस्टैम्प के साथ DateTime ऑब्जेक्ट बनाने की कोशिश कर रहा हूं। ऐसा करने का सबसे आसान तरीका क्या है?PowerShell

मैंने कोशिश की:

Get-Date 
    -Format (Get-Culture).DateTimeFormat.UniversalSortableDateTimePattern 
    -Date "1970-01-01 00:00:00Z" 

लेकिन मैं इस उत्पादन प्राप्त करें:

1969-12-31 19:00:00Z 

यह कुछ घंटों बंद है। समझ में मेरी चूक कहाँ है?

उत्तर

22

DateTime ऑब्जेक्ट स्वयं उचित यूटीसी समय के साथ बनाया जा रहा है। लेकिन जब पावरशेल इसे प्रिंट करता है तो यह इसे मेरी स्थानीय संस्कृति और समय क्षेत्र में बदल देता है, इस प्रकार अंतर।

सबूत:

$UtcTime = Get-Date -Date "1970-01-01 00:00:00Z" 
$UtcTime.ToUniversalTime() 
+1

खंडन: $ UtcTime.Kind मेरा मतलब है, जब आप इसे कुछ अन्य कार्य करने के लिए पास - ज्यादातर मामलों में यह एक स्थानीय समय के रूप में यह व्यवहार करेगा, क्योंकि यह है वास्तव में क्या संग्रहीत किया जाता है। और PowerShell इसे प्रिंट करने पर आपके स्थानीय समय में परिवर्तित नहीं करता है ... अन्यथा आपके ToUniversalTime() भी स्थानीय –

+2

'गेट-डेट' दिए गए यूटीसी समय को स्थानीय समय में परिवर्तित कर देगा और इसे 'डेटटाइम' ऑब्जेक्ट के रूप में 'प्रकार' के साथ संग्रहीत करेगा 'स्थानीय' पर सेट करें। यह समय में सही भौतिक बिंदु संग्रहीत करता है, लेकिन यह एक स्थानीय समय है और स्थानीय समय में मुद्रित किया जाएगा। ध्यान दें कि यह अभी भी प्रश्न का सही उत्तर है। ओपी ने विशेष रूप से यूटीसी के साथ 'डेटाटाइम' ऑब्जेक्ट बनाने के लिए नहीं कहा था। Upvoted। –

0

यह है कि यह कैसे है, है ना .NET में काम करता है? पावरशेल बस ToUniversalTime विधि को कॉल करता है। http://msdn.microsoft.com/en-us/library/system.datetime.touniversaltime.aspx

The Coordinated Universal Time (UTC) is equal to the local time minus the 
UTC offset. For more information about the UTC offset, see TimeZone.GetUtcOffset. 
The conversion also takes into account the daylight saving time rule that applies 
to the time represented by the current DateTime object. 
14
(get-date).ToUniversalTime().ToString("yyyyMMddTHHmmssfffffffZ") 
+2

ToString मान को 24 घंटे का समर्थन करना चाहिए, इसलिए इसमें पूंजी एचएच होनी चाहिए: '.ToString (" yyyyMMddTHHmmssfffffffZ ") उदाहरण के लिए। 02:00:00 अपराह्न ..140000 बनना चाहिए क्योंकि यूटीसी टाइमज़ोन-अज्ञेय –

+0

यह बहुत अच्छा काम करता है! 'पावरशेल-नोप्रोफाइल-एक्सेक्यूशन पॉलिसी बायपास-कॉमांड "((गेट-डेट) .ऑन यूनिवर्सलटाइम())। टूस्ट्रिंग (\" yyyy-MM-ddTHH: mm: ss + 0000 \ ")" ' –

1
$utctime = New-Object DateTime 1970, 1, 1, 0, 0, 0, ([DateTimeKind]::Utc) 

आप $utctime प्रिंट आउट हैं, तब से आपको मिलेगा:

1. januar 1970 00:00:00 

इसके अलावा, $utctime.Kind सही ढंग से Utc को तैयार है।

1
$time = [DateTime]::UtcNow | get-date -Format "yyyy-MM-ddTHH:mm:ssZ" 

यह भी काम करने के लिए प्रकट होता है