Converting UTC dates to other timezones

后端 未结 5 447
礼貌的吻别
礼貌的吻别 2020-11-29 21:55

I\'m converting a UTC time to another timezone, using this method:

SimpleDateFormat format = new SimpleDateFormat(\"yyyy-MM-dd HH:mm:ss\");
Date parsed = for         


        
相关标签:
5条回答
  • 2020-11-29 22:11

    You need to take Daylight Savings into consideration. I do this by working out the offset (from UTC) in millieseconds. Something like this should work.

    int currentOffsetFromUTC = tz.getRawOffset() + (tz.inDaylightTime(parsed) ? tz.getDSTSavings() : 0);
    String result = format.format(parsed.getTime() + currentOffsetFromUTC);
    

    The inDayLightTime(...) method returns a boolean and must be passed a Date object in order for it to decide if that 'date' represents one during a DST period or not.

    0 讨论(0)
  • 2020-11-29 22:21

    Following code works fine for me to change a date from one tz to another. It considers the DayLightSaving also.

    public static Calendar changeTimezoneOfDate(Date date, TimeZone fromTZ, TimeZone toTZ) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        long millis = calendar.getTimeInMillis();
        long fromOffset = fromTZ.getOffset(millis);
        long toOffset = toTZ.getOffset(millis);
        long convertedTime = millis - (fromOffset - toOffset);
        Calendar c = Calendar.getInstance();
        c.setTimeInMillis(convertedTime);
        return c;
    }
    
    0 讨论(0)
  • 2020-11-29 22:21

    You can Parse your date format and time zone according to your requirements. Try this snippet of code i hope it helpful for you.

    private String getFormattedDate(String OurDate) {
        try {
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); // According to your Server TimeStamp
            formatter.setTimeZone(TimeZone.getTimeZone("UTC")); //your Server Time Zone
            Date value = formatter.parse(OurDate); // Parse your date
    
            SimpleDateFormat dateFormatter = new SimpleDateFormat("MM-dd-yyyy"); //this format changeable according to your choice
            dateFormatter.setTimeZone(TimeZone.getDefault());
            OurDate = dateFormatter.format(value);
    
        } catch (Exception e) {
            OurDate = "00-00-0000 00:00";
    
        }
        return OurDate;
    }
    
    0 讨论(0)
  • 2020-11-29 22:28

    Converting a date String of the format "2011-06-23T15:11:32" to out time zone.

     private String getDate(String dateString) {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
        formatter.setTimeZone(TimeZone.getTimeZone("UTC"));
        Date value = null;
        try {
            value = formatter.parse(dateString);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        SimpleDateFormat dateFormatter = new SimpleDateFormat("dd/MM/yyyy hh:mmaa");
        dateFormatter.setTimeZone(TimeZone.getDefault());
        String dt = dateFormatter.format(value);
    
        return dt;
    }
    
    0 讨论(0)
  • 2020-11-29 22:30

    It turns out the code was almost correct, what I didn't take into account was that when parsing the String to get a Date object initially, it uses default system TimeZone, so the source date was not in UTC as I expected.

    The trick was to set the timezone when parsing the date to UTC and then set it to destination TimeZone. Something like this:

    SimpleDateFormat sourceFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    sourceFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
    Date parsed = sourceFormat.parse("2011-03-01 15:10:37"); // => Date is in UTC now
    
    TimeZone tz = TimeZone.getTimeZone("America/Chicago");
    SimpleDateFormat destFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    destFormat.setTimeZone(tz);
    
    String result = destFormat.format(parsed);
    
    0 讨论(0)
提交回复
热议问题