2016-05-09 6 views
1

Я хотел был бы преобразовать дату, указанную в формате UTC, к дате в формате CET.Преобразование даты из UTC в CET

Проблема в том, что мне нужно добавить или вычесть часы соответственно.

Пример:

Date = "2015-07-31 01:14:05" 

Я хотел бы, чтобы преобразовать его в немецкую дату (добавив два часа):

2015-07-31 03:14:05" 

Мой код:

private static Long convertDateFromUtcToCet(String publicationDate) { 
    //"2015-07-31 01:14:05" 

    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss"); 
    //SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-mm-dd"); 
    Date date = null; 
    try { 
     date = simpleDateFormat.parse(publicationDate); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 
    Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC")); 
    calendar.setTime(date); 
    Date givenDate = calendar.getTime(); 
    System.out.println("Original UTC date is: " + givenDate.toString()); 

    TimeZone timeZone = TimeZone.getTimeZone("CET"); 
    calendar.setTimeZone(timeZone); 
    Date currentDate = calendar.getTime(); 
    System.out.println("CET date is: " + currentDate.toString()); 

    long milliseconds = calendar.getTimeInMillis(); 

    return milliseconds; 
} 

Печатается:

Original UTC date is: Sat Jan 31 01:14:05 IST 2015 
CET date is: Sat Jan 31 01:14:05 IST 2015 
+0

Вы не разобрать дату, время UTC, это, вероятно, вопрос –

+1

Если вы посмотрите внимательно, вы можете увидеть на выходе, что пошло не так: при отсутствии разборной информации о часовом поясе во входной строке 'SimpleDateFormat' по умолчанию будет использоваться любой часовой пояс, в котором вы находитесь.' IST' в этом случае (так что вы либо в Ирелан d или в Индии, что должно служить предупреждением об использовании трехбуквенных сокращений часового пояса). – biziclop

+0

Если вы используете Java8, ознакомьтесь с новым синтаксисом данных/календарей. Новый API намного легче понять и прост в использовании. –

ответ

2

Прежде всего, ваша строка шаблона неверна. Это yyyy-MM-dd, а не yyyy-mm-dd.

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); 

Для разбора с заданной временной зоны, установите его:

simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); 
1

Попробуйте использовать:

long ts = System.currentTimeMillis(); 
Date localTime = new Date(ts); 
String format = "yyyy-mm-dd hh:mm:ss"; 
SimpleDateFormat sdf = new SimpleDateFormat(format); 

// Convert Local Time to UTC (Works Fine) 
sdf.setTimeZone(TimeZone.getTimeZone("UTC")); 
Date gmtTime = new Date(sdf.format(localTime)); 
System.out.println("Local:" + localTime.toString() + "," + localTime.getTime() + " --> UTC time:" 
     + gmtTime.toString() + "," + gmtTime.getTime()); 


// Convert UTC to Local Time 
Date fromGmt = new Date(gmtTime.getTime() + TimeZone.getDefault().getOffset(localTime.getTime())); 
System.out.println("UTC time:" + gmtTime.toString() + "," + gmtTime.getTime() + " --> Local:" 
     + fromGmt.toString() + "-" + fromGmt.getTime()); 
Смежные вопросы