2012-11-04 23 views
4

我正在使用JODA TIME庫來保存DATETIME。在我運行測試之前,我需要設置測試數據。所以我有一個yaml文件,我已經定義了測試數據的日期,我希望它將轉換爲DATETIME對象,但它們不是。如何從YAML文件加載DATETIME對象?

我正在使用Play Framework 2.0。任何想法如何我可以將YAML日期轉換爲一個真正的DATETIME對象。

這是我的YAML文件看起來怎麼樣

users: 
    - !!models.User 
     createdOn:  2001-09-09T01:46:40Z 
     fName:   Mike 
     lName:   Roller 
+0

您是否找到解決方案? – Maxence

回答

0
org.joda.time.DateTime getDateFromFile(final String string, final String path) throws IOException { 
    final BufferedReader f = new BufferedReader(new FileReader(path)); 
    String s; 
    final Pattern pattern = Pattern.compile(".+" + string + ".+([0-9\\-:ZT]+)"); 
    while ((s = f.readLine()) != null) 
    { 
     final Matcher m = pattern.matcher(s); 
     if (m.matches()) 
     { 
      return ISODateTimeFormatter.dateTimeNoMillis().parseDateTime(m.group(1)); 
     } 
    } 


    return null; 
} 

使用方法

getDateFromFile("createdOn:", pathToFile) 
1

snakeyaml project WIKI服用。例子是here

如何分析JodaTime

由於JodaTime是沒有的JavaBean(因爲它沒有一個空的構造函數),它需要一些額外的處理分析時:

private class ConstructJodaTimestamp extends ConstructYamlTimestamp { 
    public Object construct(Node node) { 
     Date date = (Date) super.construct(node); 
     return new DateTime(date, DateTimeZone.UTC); 
    } 
} 

當JodaTime實例是JavaBean的您可以使用以下屬性:

Yaml y = new Yaml(new JodaPropertyConstructor()); 

class JodaPropertyConstructor extends Constructor { 
    public JodaPropertyConstructor() { 
     yamlClassConstructors.put(NodeId.scalar, new TimeStampConstruct()); 
    } 

    class TimeStampConstruct extends Constructor.ConstructScalar { 
     @Override 
     public Object construct(Node nnode) { 
      if (nnode.getTag().equals("tag:yaml.org,2002:timestamp")) { 
       Construct dateConstructor = yamlConstructors.get(Tag.TIMESTAMP); 
       Date date = (Date) dateConstructor.construct(nnode); 
       return new DateTime(date, DateTimeZone.UTC); 
      } else { 
       return super.construct(nnode); 
      } 
     } 

    } 
} 
+0

現在它消失了。 –