问题与日期和时区如何获得没有时区的日期?

时间:2014-02-26 20:17:31

标签: java

我尝试将Tics中的日期转换为UTC日期时间格式 - 'YYYY-MM-DDThh:mm:ss'

public static DateFormat getFormat() {
    String systemLocale = System.getProperty("user.language"); //$NON-NLS-1$ 
    Locale locale = new Locale(systemLocale);
    DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM, locale);
    return dateFormat;
}

public static Object getFormatedValue(Object value) {
        String updated = (strValue).replaceAll(pattern, "$1"); //$NON-NLS-1$
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(Long.parseLong(updated));
        return getFormat().format(new Date(calendar.getTimeInMillis()));
}

public static Object getOdataValue(Object value) throws ParseException {

    DateFormat dateFormat = getFormat();

    Date parse = dateFormat.parse(value.toString());
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(parse.getTime());

    return "\"/Date(" + calendar.getTimeInMillis() + ")/\""; //$NON-NLS-1$ //$NON-NLS-2$

}

我以UTC为例得到dtae时间结果的问题 -

1393358368000 =星期二,2014年2月25日19:59:28 GMT

您的时区:2/25/2014 9:59:28 PM GMT + 2

此代码的结果是2/25/2014 21:59:28 PM

如何在没有时区的情况下获得结果?在这种情况下,我希望结果将是,即格林威治标准时间2014年2月25日19:59:28 我可以勾选并使用UTC获得不同的结果吗?

1 个答案:

答案 0 :(得分:2)

你所要求的并不完全清楚,但如果你想要的是DateFormat使用UTC,那很简单:

public static DateFormat getFormat() {
    String systemLocale = System.getProperty("user.language"); //$NON-NLS-1$ 
    Locale locale = new Locale(systemLocale);
    DateFormat dateFormat = DateFormat.getDateTimeInstance(
        DateFormat.MEDIUM, DateFormat.MEDIUM, locale);
    dateFormat.setTimeZone(TimeZone.getTimeZone("Etc/UTC"));
    return dateFormat;
}

(顺便说一下,你没有使用Locale.getDefault()作为默认语言环境的原因吗?或让DateFormat自己选择它?)

另请注意,您完全没有任何理由创建日历。您的getFormattedValuegetOdataValue方法可以简化为:

public static Object getFormattedValue(Object value) {
    String updated = (strValue).replaceAll(pattern, "$1"); //$NON-NLS-1$
    long millis = Long.parseLong(updated);
    return getFormat().format(new Date(millis));
}

public static Object getOdataValue(Object value) throws ParseException {
    DateFormat dateFormat = getFormat();
    Date parsedDate = dateFormat.parse(value.toString());
    return "\"/Date(" + date.getTime() + ")/\""; //$NON-NLS-1$ //$NON-NLS-2$
}