/**
*
*/
package timeflow.format.field;
import java.text.ParseException;
import java.util.Calendar;
import timeflow.data.time.RoughTime;
import timeflow.data.time.TimeUnit;
import timeflow.data.time.TimeUtils;
public class FormatDateTime extends FieldFormat
{
DateTimeGuesser dateGuesser=new DateTimeGuesser();
@Override
public String format(Object o) {
return ((RoughTime)o).format();
}
@Override
public Object _parse(String s) throws Exception {
if (s.length()==0)
return null;
Object o= readTime(s);
if (o==null)
throw new IllegalArgumentException();
return o;
}
public RoughTime readTime(Object o) throws ParseException
{
if (!(o instanceof String))
throw new IllegalArgumentException("Expected String, got: "+o);
return dateGuesser.guess((String)o);
}
DateTimeGuesser g=new DateTimeGuesser();
@Override
public double scoreFormatMatch(String s) {
if (s==null || s.length()==0)
return -.05;
try
{
RoughTime f=g.guess(s);
if (f==null)
return -1;
if (g.getLastGoodFormat().getUnits()==TimeUnit.YEAR)
{
int year=TimeUtils.cal(f.getTime()).get(Calendar.YEAR);
if (year>2100)
return -1;
if (year>1900 && year<2050)
return 1;
if (year>2050 || year<1600)
return .1;
return .5;
}
return 2;
}
catch (Exception e)
{
return -1;
}
}
@Override
public Class getType() {
return RoughTime.class;
}
@Override
public String getHumanName() {
return "Date/Time";
}
}