将UTC时间戳转换为任何时区

时间:2015-06-16 15:02:26

标签: java

我正在尝试将UTC日期时间戳转换为任何时区,但在这两种情况下我总是以UTC日期时间结束。

 import java.sql.Timestamp;
 import java.text.DateFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.TimeZone;

  public class UTCtoLocalTime {

private static String ConvertToLocalTime(String id, String time) throws ParseException{
    DateFormat localtime = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");
    localtime.setTimeZone(TimeZone.getTimeZone(id));
    return localtime.format(localtime.parse(time));
}

public static void main(String[] args) throws ParseException {
    SimpleDateFormat dateFormatGmt = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");
    dateFormatGmt.setTimeZone(TimeZone.getTimeZone("UTC"));

    String time =  dateFormatGmt.format(new Timestamp(System.currentTimeMillis()));

    System.out.println("UTC time "+ time);
    System.out.println("Local Time "+ ConvertToLocalTime("America/Mexico_City", time));
}

}

我不确定我在哪里做错了。任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:1)

日期没有时区。在字符串17824 3224 (Blank space for Year 2002) 中,您以某种方式显示日期,并期望该显示使用其他时区。它不会。

字符串time表示一个时区中的时间戳,您希望将其更改为表示另一个时区中的时间戳的字符串,

所以基本上你有

创建另一个SimpleDateFormat并将第二个时区应用于它 使用它将Date对象格式化为新的String

这是实施代码

time

我机器上的OutPut

public class TestClass {
        private static String ConvertToLocalTime(String id, String time) throws ParseException{
            DateFormat localtime = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");
            localtime.setTimeZone(TimeZone.getTimeZone(id));
            return localtime.format(localtime.parse(time));
        }

        public static void main(String[] args) throws ParseException {
            SimpleDateFormat dateFormatGmt = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");
            dateFormatGmt.setTimeZone(TimeZone.getTimeZone("UTC"));

            String time =  dateFormatGmt.format(new Timestamp(System.currentTimeMillis()));
            System.out.println("UTC time "+ time);

            SimpleDateFormat dateFormatGmt1 = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");
            String time1 =  dateFormatGmt1.format(new Timestamp(System.currentTimeMillis()));
            System.out.println("Local Time "+ ConvertToLocalTime("America/Mexico_City", time1));
        }

        }

答案 1 :(得分:0)

我在这里使用它来实现我的目的

public static String UTCtolocaltime(String timzoneid, String UTCTime){
        String convertedlocaldatetime;
        Date datetimeinutc = null;
        SimpleDateFormat utcdateFormat = new SimpleDateFormat(some patteren); 
        utcdateFormat.setTimeZone(TimeZone.getTimeZone(UTC));
        try {
            datetimeinutc = utcdateFormat.parse(UTCTime);
        } catch (ParseException e1) {
            log.error(e1);
        }
        SimpleDateFormat localdateFormat = new SimpleDateFormat(some patteren); 
        localdateFormat.setTimeZone(TimeZone.getTimeZone(timzoneid));
             convertedlocaldatetime = localdateFormat.format(datetimeinutc);
             return convertedlocaldatetime;
    }

答案 2 :(得分:0)

JODA时间容易:

假设你有一个DateTime存储以UTC为单位的传入日期时间,那么获取另一个时区的字符串表示的方法仅仅是:

{% with obj.site.profile.default_role==obj as default %}{% endwith %}

{% with default=obj.site.profile.default_role==obj %}{% endwith %}

在UTC和另一个时区之间进行String,LocalDateTime和Datetime转换的不同组合都非常容易