5

DATETIME を永続化するために JODA TIME ライブラリを使用しています。テストを実行する前に、テスト データをセットアップする必要があります。だから私は、DATETIMEオブジェクトに変換することを望んでいた日付でテストデータを定義したyamlファイルを持っていますが、そうではありません。

Play Framework 2.0 を使用しています。YAML 日付を実際の DATETIME オブジェクトに変換する方法を教えてください。

私のyamlファイルは次のようになります

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

2 に答える 2

1

snakeyaml プロジェクト WIKIから取得。例はここにあります。

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);
            }
        }

    }
}
于 2013-09-24T18:14:17.570 に答える
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)
于 2012-11-05T19:07:10.860 に答える