2017-02-20 16 views
0

Как я могу получить формат временной зоны и возвращает строку, как так https://msdn.microsoft.com/en-us/library/gg154758.aspx - колонки Time zone name, , например "SA Pacific Standard Time"Android: как получить строку часовой пояс в формате, указанном здесь

или хуже приходит к худшему, как могу ли я получить его так: (UTC-05:00) Bogota, Lima, Quito или, по крайней мере, (UTC-05:00)

так, чтобы я мог вручную сопоставить его с прежней строкой, если я поместил их все на карту?

ответ

1

Вы пробовали?

TimeZone tz = TimeZone.getDefault(); 
System.out.println("TimeZone "+tz.getDisplayName(false, TimeZone.SHORT)+" Timezon id :: " +tz.getID()); 

Результат будет, если устройство оказывается в Австралии

TimeZone GMT + 09: 30 Timezon ID :: Австралия/Дарвин

Это должно вернуть UTC в виде строки и дата объекта. Вы можете изменить формат даты.

static final String DATEFORMAT = "yyyy-MM-dd HH:mm:ss" 

public static Date getUTCdatetimeAsDate() 
{ 
    //note: doesn't check for null 
    return stringDateToDate(GetUTCdatetimeAsString()); 
} 

public static String getUTCdatetimeAsString() 
{ 
    final SimpleDateFormat sdf = new SimpleDateFormat(DATEFORMAT); 
    sdf.setTimeZone(TimeZone.getTimeZone("UTC")); 
    final String utcTime = sdf.format(new Date()); 

    return utcTime; 
} 

public static Date stringDateToDate(String StrDate) 
{ 
    Date dateToReturn = null; 
    SimpleDateFormat dateFormat = new SimpleDateFormat(DATEFORMAT); 

    try 
    { 
     dateToReturn = (Date)dateFormat.parse(StrDate); 
    } 
    catch (ParseException e) 
    { 
     e.printStackTrace(); 
    } 

    return dateToReturn; 
} 
+0

да, он возвращает объект, имеющий строковый формат, который не работает для меня, и он также имеет время UTC. Существует несколько схожий формат, например «Восточноевропейское стандартное время», но в таблице, включенной в мой вопрос, ее назвали «Европейское стандартное время» –

+1

Кроме того, между UTC и GMT нет разницы. Первый пример кода дает вам GMT, равный тому же, что и UTC. –

+1

Второй образец кода имеет метод, который вернет вам UTC в виде строки. –

1

Это может быть неуместным (не знаю, если Android полностью поддерживает Java-8), но вы можете сделать это с помощью стандартного Java api:

ZonedDateTime dateTime = ZonedDateTime.parse("2007-12-03T10:15:30+01:00[Asia/Tokyo]"); 
System.out.println(dateTime); // 2007-12-03T10:15:30+09:00[Asia/Tokyo] 

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("(O) z"); 
System.out.println(dateTime.format(formatter)); // (GMT+9) JST 
+0

Если отображаемые выходы журнала верны, где время отформатировано в формате UTC, я вижу только временную метку iso8601 и отметку времени по Гринвичу. Это «+09: 00» время utc? –

+1

GMT и UTC - это то же самое время. Поэтому, если у вас должен быть UTC перед ним, вы можете просто заменить строку GMT на UTC. –