2016-05-01 17 views
1

Es ist wie dieses 2016年4月27日 (Jahr, Monat, Datum)Rubin: Parse Mal in der chinesischen

Was eine gute Möglichkeit wäre, es zu analysieren?

Ich glaube, ich mit etwas wegkommen kann wie

time = '2016年4月27日' 
    year = time.split('年')[0] 

Und dann die Zeit neu organisieren. Aber das beinhaltet auch encoding utf-8 Zeug und ich bin nicht sehr vertraut damit.

Antwort

3

Unter der Annahme, dass '2016年4月27日' ist Ihre Eingabezeichenfolge und Sie wollen ein Date Objekt aus ihm heraus, da Sie wissen, was jede Komponente der Zeichenfolge darstellt, Sie Date.strptime verwenden könnte und in einem Format-String übergeben:

irb> date = Date.strptime("2016年4月27日", "%Y年%m月%d日") 
=> #<Date: 2016-04-27 ((2457506j,0s,0n),+0s,2299161j)> 
irb> date.year 
=> 2016 
irb> date.month 
=> 4 
irb> date.day 
=> 27 
+0

Wow, dachte nicht, dass es so einfach sein könnte, danke! – cqcn1991

+0

@ cqcn1991, gern geschehen. Wenn die Lösung so funktioniert hat, wie Sie es wollten, denken Sie bitte daran, diese Antwort zu akzeptieren :-) –

0
1.9.3-p551 :001 > r = /(\d+)年(\d+)月(\d+)日/ 
=> /(\d+)年(\d+)月(\d+)日/ 
1.9.3-p551 :002 > s = '2016年4月27日' 
=> "2016年4月27日" 
1.9.3-p551 :003 > m = r.match(s) 
=> #<MatchData "2016年4月27日" 1:"2016" 2:"4" 3:"27"> 
1.9.3-p551 :004 > m.to_a 
=> ["2016年4月27日", "2016", "4", "27"] 
1.9.3-p551 :005 > yr, mo, da = m[1..-1] 
=> ["2016", "4", "27"] 
1.9.3-p551 :006 > yr 
=> "2016" 
1.9.3-p551 :007 > mo 
=> "4" 
1.9.3-p551 :008 > da 
=> "27" 
+0

Die Regex könnte auch benannte Captures verwenden, um die Datumskomponenten zu erhalten: 'r =/(? \ d +) 年 (? \ d +) 月 (? \ d +) 日 /', dann könnten Sie 'm [: Jahr] ',' m [: Monat] 'und' m [: Tag] 'direkt auf dem' MatchData' Objekt. –