0

有以下代码:

public static String getDateOnCurrentTimezone(String date, String timezone) {
    SimpleDateFormat sdf = new SimpleDateFormat("MM-dd kk:mm:ss"); 
    sdf.setTimeZone(TimeZone.getTimeZone(timezone));
    try {
        Date d = sdf.parse(date);
        sdf.setTimeZone(TimeZone.getDefault());
        return sdf.format(d);
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return null;
}

此代码必须将日期从一个时区格式化为另一个不带日期的时区,但它始终返回“null”。如果我将格式更改为“yyyy-MM-dd”,效果很好。我该如何解决?谢谢。

4

2 回答 2

1

如果要解析日期并返回具有不同表示形式的 String,则需要两个 DateFormat:

Date d = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(date);
String result = new SimpleDateFormat("MM-dd kk:mm:ss").format(d);

请注意,您可能打算使用HH而不是kk. 检查 javadoc 看看有什么区别。

于 2013-09-07T11:19:52.433 回答
0

The problem is in your params, you try to parse the date:

2013-09-05 19:48:05

With the format

MM-dd kk:mm:ss

This have two problems:

  1. The hour, k is for 1-24, you probably want to use HH (0-23), see Oracle Documentation
  2. Is not the same format, the format you pass is: yyyy-MM-dd HH:mm:ss

Try this code:

public static String getDateOnCurrentTimezone(String date, String timezone) {

    SimpleDateFormat outPutParser = new SimpleDateFormat("MM-dd HH:mm:ss");
    SimpleDateFormat inputPutParser = new SimpleDateFormat(
            "yyyy-MM-dd HH:mm:ss");

    outPutParser.setTimeZone(TimeZone.getTimeZone(timezone));
    try {

        Date d = inputPutParser.parse(date);
        outPutParser.setTimeZone(TimeZone.getDefault());
        return outPutParser.format(d);
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return null;
}

Sorry for my bad english

于 2013-09-07T11:29:12.457 回答