当地时间到EST时间转换

时间:2015-07-07 12:25:12

标签: android date timezone simpledateformat

Android当地时间到EST时间转换

代码:

SimpleDateFormat serverDateFormat=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
serverDateFormat.setTimeZone(TimeZone.getTimeZone("EST"));
Calendar calender= Calendar.getInstance(Locale.getDefault());
String  time=serverDateFormat.format(calender.getTime());

但是我错误的时间。 与正确时间相差一小时。 例如: 当地时间:Tue Jul 07 17:30:00 GMT + 05:30 2015 格式化时间:2015/07/07 07:00:00 正确的时间:2015/07/07 08:00:00

2 个答案:

答案 0 :(得分:2)

您的问题是使用标识符“EST”代表“东部标准时间”。顾名思义它不使用夏令时规则。证明:

TimeZone tz = TimeZone.getTimeZone("EST");
long offset = tz.getOffset(System.currentTimeMillis()) / (1000 * 3600);
System.out.println(tz.getID() + ":" + tz.useDaylightTime() + "/" + offset);
// output: EST:false/-5

使用时区ID“America / New_York”代替:

tz = TimeZone.getTimeZone("America/New_York");
offset = tz.getOffset(System.currentTimeMillis()) / (1000 * 3600);
System.out.println(tz.getID() + ":" + tz.useDaylightTime() + "/" + offset);
// output: America/New_York:true/-4

然后您将观察7月份的夏令时间,偏差为(+05:30) - ( - 04:00)= +09:30,导致预计当地时间早上8点。

答案 1 :(得分:0)

嘿,请试试function时间conversion -

    public static String getTime(String time, SimpleDateFormat sdf) {
    String convertedTime = "";

    try {
        TimeZone timeZone = TimeZone.getDefault();
        Date postdate = sdf.parse(time);
        long postTimeStamp = postdate.getTime() + timeZone.getRawOffset();

        String dateString = sdf.format(new Date(postTimeStamp));

        convertedTime = dateString;


        // convertedTime = getLastTime(context, time);
    } catch (Exception e) {
        e.printStackTrace();
    }

    return convertedTime;
}