2015-08-20 30 views
5

Konwersja daty i czasu zawsze była moim słabym ogniwem. Mam następujące wartości w formacie ciągu:Konwertuj datę ze znaną strefą czasową na datę UTC

  1. datę String = "21.08.2015 03:15" i strefy czasowej dla tej dacie jest
  2. String stref czasowych = "05 GMT + 30";

Teraz muszę ukryć tę datę, dla której już znam strefę czasową, na datę UTC.

+0

Czy możesz użyć interfejsu API Data/czas Java 8? –

+0

@MickMnemonic Używam tylko Java8 –

Odpowiedz

1

Jeśli podano czas w Kolejny kod strefy czasowej "GMT + 05: 30" zamieni go na strefę czasową UTC:

String strDate = "2015-08-21 03:15"; 
String timeZone="GMT+05:30"; 
String format = "yyyy-MM-dd HH:mmz"; 
SimpleDateFormat formatter = new SimpleDateFormat(format); 
Date dateStr = formatter.parse(strDate+timeZone); 
formatter.setTimeZone(TimeZone.getTimeZone("UTC")); 
String formattedDate = formatter.format(dateStr); 
System.out.println("UTC datetime is: "+formattedDate); 
+0

Twój kod podaje dane wyjściowe jako 2015-08-20 22:15 Z Według tej witryny powinno być 21- sierpnia 21:45 http://www.worldtimeserver.com/convert_time_in_UTC.aspx?y=2015&mo=8&d= 20 & h = 21 & mn = 45 –

+0

@HiteshBhutani nieznacznie zaktualizowałem kod.Prawidłowa odpowiedź to 20 sierpnia 21:45 UTC. I tak, powinno być 20 sierpnia, a nie 21, ponieważ UTC jest "za" GMT + 5: 30 –

+0

Perfect. I tak, prawidłowa odpowiedź to 20 sierpnia. Zdałem sobie sprawę po tym, jak napisałem komentarz, że był niepoprawny, ale zapomniałem zaktualizować. Dzięki za pomoc. Zaznaczę odpowiedzi jako zaakceptowane. –

0

można zobaczyć:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss"); 
Date date = null; 
try { 
    //Here you say to java the initial timezone. This is the secret 
    sdf.setTimeZone(TimeZone.getTimeZone("UTC")); 
    date = sdf.parse(review); 
} catch (ParseException e) { 
    e.printStackTrace(); 
    } 

//Here you set to your timezone 
sdf.setTimeZone(TimeZone.getDefault()); 
System.out.println(sdf.format(date)); 
+0

Co to jest "recenzja"? O ile widzę, to próbuje przekonwertować datę UTC na lokalną datę (nie jest to, o co prosił OP). – Hulk

1

Możesz spróbować tak:

Podejście 1: Korzystanie z Java Data:

//Your input date string 
String date="2015-08-21 03:15"; 

// date format your string 
String format = "yyyy-MM-dd HH:mm"; 

//Create SimpleDateFormat instance 
SimpleDateFormat sdf = new SimpleDateFormat(format); 

// Convert Local Time to UTC 
sdf.setTimeZone(TimeZone.getTimeZone("UTC")); 

//parse your input date string to UTC date 
Date gmtTime = new Date(sdf.parse(date)); 

Podejście 2: Korzystanie z Joda czas (zalecane)

String dateString = "2015-08-21 03:15:00+5:30"; 

String pattern = "yyyy-MM-dd HH:mm:ssZ"; 

DateTimeFormatter dtf = DateTimeFormat.forPattern(pattern); 

DateTime dateTime = dtf.parseDateTime(dateString); 

System.out.println(dateTime); 
+1

W twoim kodzie nie widzę, żebyś używał strefy czasowej GMT + 05: 30. To, co napisałeś, pobierze domyślną strefę czasową serwera i przekształci ją w czas UTC. Powiedzmy, że twój kod działa na serwerze, który jest w strefie czasowej MST. Będzie uwzględniać datę 2015-08-21 03:15 jako datę MST i przekształcić ją w datę UTC. Czego nie chcę. Wiem, że ta data jest w strefie czasowej GMT + 05: 30, czyli IST i trzeba ją przekonwertować na czas UTC. –

+0

@HiteshBhutani .. Zaktualizowałem odpowiedź, potrzebujesz czasu Joda na obsługę przypadku +5: 30. – Garry

0

Date w java oznacza liczbę milisekund od 1970 roku liczba ta sama nie ma specyficzną strefę czasową. Oznacza to, że jeśli utworzysz datę o numerze new Date(), otrzymasz bieżące milisekundy od 1970 roku i jeśli wywołasz toString, wartość ta będzie reprezentowana w Twojej aktualnej strefie czasowej. Rzeczywisty czas reprezentowany przez tę liczbę jest zależny od strefy czasowej. Z tego powodu można ustawić klasy TimeZone na Calendar i Format.

Do wystąpienia kalendarz z konkretnym TimeZone można to zrobić:

public static Calendar getUtcCalendar() { 
    GregorianCalendar.getInstance(TimeZone.getTimeZone("UTC")); 
} 

Więc do konwertowania Date do określonego czasu UTC Strefa czasowa:

Calendar calendar = getUtcCalendar(); 
calendar.setTime(date); 
return calendar; 
0

Ponieważ potrzebujesz tylko rozwiązania Java-8:

String input = "2015-08-21 03:15"; 
String offsetInfo = "GMT+05:30"; 

LocalDateTime ldt = 
    LocalDateTime.parse(input, DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm")); 
ZoneOffset offset = 
    ZoneOffset.of(offsetInfo.substring(3)); // GMT-prefix needs to be filtered out 

LocalDateTime result = 
    ldt.atOffset(offset).withOffsetSameInstant(ZoneOffset.UTC).toLocalDateTime(); 
System.out.print(result); // output: 2015-08-20T21:45 
Powiązane problemy