आप तिथियों में पढ़ने के लिए Data.Time.Format में फ़ंक्शंस का उपयोग कर सकते हैं। मैंने नीचे एक छोटा सा प्रोग्राम शामिल किया है जो एक प्रारूप में एक तिथि में पढ़ता है और लिखता है कि तारीख दो अलग-अलग प्रारूपों में वापस आती है। एकल-अंक महीनों या दिनों में पढ़ने के लिए,% और प्रारूप विनिर्देशक के बीच एक एकल हाइफ़न (-) रखें।
import Locale
import Data.Time
import Data.Time.Format
main =
do
let dateString = "26 Jan 2012 10:54 AM"
let timeFromString = readTime defaultTimeLocale "%d %b %Y %l:%M %p" dateString :: UTCTime
-- Format YYYY/MM/DD HH:MM
print $ formatTime defaultTimeLocale "%Y/%m/%d %H:%M" timeFromString
-- Format MM/DD/YYYY hh:MM AM/PM
print $ formatTime defaultTimeLocale "%m/%d/%Y %I:%M %p" timeFromString
उत्पादन इस तरह दिखता है:
"2012/01/26 10:54"
"01/26/2012 10:54 AM"
Data.Time.Format "समय" पैकेज से उपलब्ध है। यदि आपको एकल-अंक महीनों या दिनों का विश्लेषण करने की आवश्यकता है, तो दूसरे शब्दों में 9-9 -2012 की तिथियां, फिर% और प्रारूप वर्णों के बीच एक एकल हाइफ़न शामिल करें। तो "9 -9-2012" को पार्स करने के लिए आपको प्रारूप स्ट्रिंग "% -d-% - m-% Y" की आवश्यकता होगी।
अगस्त, 2014 के रूप में, लोकेल अब हास्केल 1998 "लोकेल" पैकेज की बजाय "सिस्टम.लोकेल" पैकेज से सबसे अच्छा प्राप्त किया गया है।इसे ध्यान में रखते, अब ऊपर से नमूना कोड पढ़ता है:
import System.Locale
import Data.Time
import Data.Time.Format
main =
do
let dateString = "26 Jan 2012 10:54 AM"
let timeFromString = readTime defaultTimeLocale "%d %b %Y %l:%M %p" dateString :: UTCTime
-- Format YYYY/MM/DD HH:MM
print $ formatTime defaultTimeLocale "%Y/%m/%d %H:%M" timeFromString
-- Format MM/DD/YYYY hh:MM AM/PM
print $ formatTime defaultTimeLocale "%m/%d/%Y %I:%M %p" timeFromString
-- now for a string with single digit months and days:
let dateString = "9-8-2012 10:54 AM"
let timeFromString = readTime defaultTimeLocale "%-d-%-m-%Y %l:%M %p" dateString :: UTCTime
-- Format YYYY/MM/DD HH:MM
print $ formatTime defaultTimeLocale "%Y/%m/%d %H:%M" timeFromString
उत्पादन अब इस तरह दिखता है:
"2012/01/26 10:54"
"01/26/2012 10:54 AM"
"2012/08/09 10:54"
जुलाई 2017 के रूप में, इसके बाद के संस्करण कोड अब पदावनत parseTime उपयोग करता है। आपको अब parseTimeOrError का उपयोग करने के लिए प्रोत्साहित किया जाता है। कोड हो जाता है:
import Data.Time
main =
do
let dateString = "26 Jan 2012 10:54 AM"
let timeFromString = parseTimeOrError True defaultTimeLocale "%d %b %Y %l:%M %p" dateString :: UTCTime
-- Format YYYY/MM/DD HH:MM
print $ formatTime defaultTimeLocale "%Y/%m/%d %H:%M" timeFromString
-- Format MM/DD/YYYY hh:MM AM/PM
print $ formatTime defaultTimeLocale "%m/%d/%Y %I:%M %p" timeFromString
-- now for a string with single digit months and days:
let dateString = "9-8-2012 10:54 AM"
let timeFromString = parseTimeOrError True defaultTimeLocale "%-d-%-m-%Y %l:%M %p" dateString :: UTCTime
-- Format YYYY/MM/DD HH:MM
print $ formatTime defaultTimeLocale "%Y/%m/%d %H:%M" timeFromString
.cabal फ़ाइल से संस्करणों: निर्माण निर्भर करता है: आधार> = 4.9 & & < 4.10, समय> = 1.6.0.1
जिसके अनुसार, इस सवाल का जवाब मिल रहा है हास्केल पैकेज विकसित होने वाली दर को थोड़ी देर तक दांत दिया गया। यह एक बेहतर समाधान की तलाश करने का समय हो सकता है।
क्या आपको% m,% d, और% Y के बीच डैश की आवश्यकता नहीं है? – sclv
@AlexBaranosky आप इस प्रश्न का एक अलग जवाब स्वीकार करने पर विचार करना चाहेंगे :) – Ben