पॉवरशेल में एक डेटटाइम फॉर्मेट कैसे करें


155

मैं Get-Dateइस तरह से कोई समस्या cmdlet को प्रारूपित कर सकता हूं :

$date = Get-Date -format "yyyyMMdd"

लेकिन एक बार मुझे एक चर में एक तारीख मिल गई , तो मैं इसे कैसे प्रारूपित करूं? नीचे दिया गया बयान

$dateStr = $date -format "yyyMMdd"

यह त्रुटि देता है:

"आपको '-f' ऑपरेटर के दाईं ओर एक मूल्य अभिव्यक्ति प्रदान करनी होगी"


3
मैं वास्तव में कामना करता हूं कि यह वाक्य रचना काम करती है। $date -format "yyyMMdd"की तुलना में किसी एकल ऑब्जेक्ट को स्वरूपित करने के लिए बहुत अधिक सहज है '{0:yyyyMMdd}' -f $date
orad

एक तरफ के रूप में: पावरशेल में एक -fऑपरेटर है (सिंटैक्स के साथ जैसा कि स्वीकृत उत्तर में दिखाया गया है), लेकिन कोई -formatऑपरेटर नहीं । त्रुटि संदेश ormatएक वैध आरएचएस ऑपरेंड नहीं होने के बारे में शिकायत कर रहा है, लेकिन ध्यान दें कि हाल ही में PowerShell संस्करण वास्तव में एक अलग, अधिक उपयोगी त्रुटि संदेश का उत्सर्जन करते हैं:Unexpected token '-format' in expression or statement
mklement0

जवाबों:


221

जैसा कि आप .NET में करेंगे :

$DateStr = $Date.ToString("yyyyMMdd")

या:

$DateStr = '{0:yyyyMMdd}' -f $Date

25

प्रश्न का उत्तर दिया गया है, लेकिन कुछ और जानकारी गायब है:

चर बनाम सीएमडीलेट

आपके पास $Dateचर में एक मान है और -fऑपरेटर इस रूप में काम करता है 'format string' -f values:। यदि आप कहते हैं कि Get-Date -format "yyyyMMdd"आप कुछ मापदंडों के साथ एक cmdlet कहते हैं । मान "yyyyMMdd" पैरामीटर Format(प्रयास help Get-Date -param Format) के लिए मान है ।

-f ऑपरेटर

प्रारूप के बहुत सारे तार हैं। कम से कम part1 और part2 को देखें । वह उपयोग करती है string.Format('format string', values')। इसे ऐसे समझें 'format-string' -f values, क्योंकि -fऑपरेटर बहुत ही समान string.Formatतरीके से काम करता है (हालाँकि कुछ अंतर हैं (स्टैक ओवरफ्लो के बारे में अधिक जानकारी के लिए देखें: पावरशेल के -f ऑपरेटर का आरएचएस वास्तव में कैसे काम करता है? )।


3
वह जो कह रहा है वह यह है कि -Format पैरामीटर Get-DateTime को स्ट्रिंग लौटाने का कारण बनता है, न कि DateTime ऑब्जेक्ट। इसलिए आपकी चर $ तिथि को अब अपेक्षित रूप नहीं दिया जा सकता है। मैं वास्तव में इच्छा -Format पैरामीटर बस एक विशेष DateTime ऑब्जेक्ट के ToString विधि के डिफ़ॉल्ट व्यवहार को बदल देगा। फिर वह काम करेगा जैसा आपने अपेक्षा की थी।
नाथन हार्टले

19

एक चीज जो आप कर सकते हैं वह है:

$date.ToString("yyyyMMdd")

धन्यवाद मैंने यह किया है - मुझे कीड़े कि -फॉर्म हालांकि काम नहीं करता है।
ईव।

18

एक बहुत ही सुविधाजनक - लेकिन शायद सभी भी कुशल नहीं हैं - समाधान सदस्य फ़ंक्शन का उपयोग करना है GetDateTimeFormats(),

$d = Get-Date
$d.GetDateTimeFormats()

यह दिनांक-मान के लिए स्वरूपण शैलियों की एक बड़ी स्ट्रिंग-सरणी को आउटपुट करता है। फिर आप []-प्रोसेसर के माध्यम से सरणी के तत्वों में से एक को चुन सकते हैं , जैसे,

PS C:\> $d.GetDateTimeFormats()[12]
Dienstag, 29. November 2016 19.14

16

एक सरल और अच्छा तरीका है:

$time = (Get-Date).ToString("yyyy:MM:dd")


2
यह एकमात्र तरीका था जो मेरे लिए एक शून्य-मूल्यवान अभिव्यक्ति त्रुटि नहीं था। धन्यवाद।
Ecker00

7

यदि आपको -Formatविकल्प का उपयोग करने की आवश्यकता है, तो ऐसा करें :

$dateStr = Get-Date $date -Format "yyyMMdd"

तथापि

$dateStr = $date.toString('yyyMMdd')

शायद अधिक कुशल है .. :)


$dateStr = (Get-Date $date -Format "yyyMMdd")किसी ऑब्जेक्ट प्रकार में परिणाम जो किसी डेटाटाइम ऑब्जेक्ट से भिन्न होता है। इसके साथ खेलने की कोशिश करें $dateStr = [datetime](Get-Date $date -Format "yyyMMdd") आपको तुरंत अंतर दिखाई देगा।
जेमी मार्शल 20

1
खैर, हाँ .. यह एक स्ट्रिंग है, यही कारण है कि मैंने इसे तारीख का नाम दिया .. :) ओपी एक स्ट्रिंग को डेट ऑब्जेक्ट को प्रारूपित करने की कोशिश कर रहा था।
tplive


4

मुझे प्रारूप पर समय और थोड़े बदलाव की जरूरत थी। यह मेरे उद्देश्यों के लिए बहुत अच्छा काम करता है:

$((get-date).ToLocalTime()).ToString("yyyy-MM-dd HHmmss")

2019-08-16 215757

टिप्पणियों में @ mklement0 के अनुसार, यह एक ही परिणाम प्राप्त करना चाहिए:

(get-date).ToString("yyyy-MM-dd HHmmss")

3

@Stej से बहुत जानकारीपूर्ण उत्तर , लेकिन यहाँ एक संक्षिप्त जवाब है: अन्य विकल्पों में , आपके पास एक चर में संग्रहीत [System.DateTime] प्रारूपित करने के लिए 3 सरल विकल्प हैं :

  1. गेट टू डेट cmdlet को वेरिएबल पास करें : Get-Date -Format "HH:mm" $date

  2. उपयोग करने के लिए स्ट्रिंग () विधि : $date.ToString("HH:mm")

  3. समग्र स्वरूपण का उपयोग करें : "{0:HH:mm}" -f $date


3

HTTP हेडर में उपयोग के लिए वर्तमान तिथि को प्रारूपित करने की कोशिश करने वाले किसी भी व्यक्ति के लिए "r" प्रारूप (RFC1123 के लिए संक्षिप्त) का उपयोग करें, लेकिन चेतावनी से सावधान रहें ...

PS C:\Users\Me> (get-date).toString("r")
Thu, 16 May 2019 09:20:13 GMT
PS C:\Users\Me> get-date -format r
Thu, 16 May 2019 09:21:01 GMT
PS C:\Users\Me> (get-date).ToUniversalTime().toString("r")
Thu, 16 May 2019 16:21:37 GMT

Ie "ToUniversalTime ()" का उपयोग करना न भूलें


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.