6

ISO 時刻形式を yyyy-mm-dd hh:mm:ss.SSS に変換しようとしています。ただし、変換を達成できません。Iam は初めての pig で、ISO 形式から yyyy-mm-dd hh:mm:ss.SSS への変換を処理する udf を作成しようとしています。

pig (FORMAT,DATE_FORMAT) のビルド関数を試してみましたが、データを必要な形式に変換できませんでした。

現在のデータ形式: 2013-08-22T13:23:18.226220+01:00

必要なデータ形式: 2013-08-22 13:23:18.226

import java.io.IOException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.pig.EvalFunc;
import org.apache.pig.data.Tuple;
import org.apache.pig.EvalFunc;
import org.joda.time.DateTime;
import org.joda.time.format.*;
import org.joda.time.format.DateTimeFormatter;
import org.joda.time.format.DateTimeFormatterBuilder;
public class test extends EvalFunc<String>{

public String exec(Tuple input) throws IOException {

    if ((input == null) || (input.size() == 0))
        return null;
    try{
        String time = (String)input.get(0);
         DateFormat dt = new SimpleDateFormat ("yyyy-mm-dd hh:mm:ss.SSS");
         Date d_t = dt.parse(time);
         String timedt = getTimedt(d_t);
         return timedt; 
    } catch (ParseException e) {

        return null;
    }


}

private String getTimedt(Date d_t) {
     DateTimeFormatterBuilder formatter =  new DateTimeFormatterBuilder();   

    } 
}

豚の日付変換を処理するにはどうすればよいですか?

4

3 に答える 3

1

2013-08-22T13:23:18.226220+01:00 は XSD の dateTime 形式であり、この方法で解析する必要があります

XMLGregorianCalendar xc = DatatypeFactory.newInstance().newXMLGregorianCalendar("2013-08-22T13:23:18.226220+01:00");

XMLGregorianCalendar から GregorianCalendar を取得してから java.util.Date を取得できます

GregorianCalendar gc = xc.toGregorianCalendar
Date date = gc.getTime();

226220 は小数秒であることに注意してください。SimpleDateFormat を SSS として解析しようとすると、226220 ミリ秒として解析され、0.2226220 秒ではなく 226 秒 220 ミリ秒になります。

于 2013-09-06T11:58:50.717 に答える
0
    DateFormat dffrom = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
    DateFormat dfto = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
    //TimeZone zone = TimeZone.getTimeZone("America/Los_Angeles");
    //dfto.setTimeZone(zone);
    Date date = dffrom.parse("2013-08-22T13:23:18.226220+01:00");    
    //2013-08-22T13:23:18.226220+01:00
    String s = dfto.format(date);
    System.out.println(s);
于 2013-09-06T11:51:26.250 に答える