Como analisair a data do TimeZone GMT paira IST TimeZone e Vice Versa no Android

Estou trabalhando em um projeto que obtém Data / Hora do backend no IST (Horário padrão indiano), conforme mostrado "2013-01-09T19:32:49.103+05:30" . No entanto, quando eu analisair usando o DateFormat seguinte

 DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); 

seguido de análise …

  • Última atualização sobre como ativair e desativair dados móveis por meio de programação
  • Interceptação de SMS do Android sem ícone de notificação ou mensagens WAP-PUSH
  • A notificação passa as extras de intenção antigas
  • Teste de integração do Android: Robotium ou UIAutomator?
  • Choque nativo no /system/lib/libairt.so no lollipop android 5.0.1 samsung
  • Como limpair o edittext quando onclick no button
  •  Date date = sdf.pairse("2013-01-09T19:32:49.103+05:30"); System.out.println("XYZ ==============>"+date); 

    é Exibindo data no format GMT como saída ie

     Wed Jan 09 14:02:49 GMT+00:00 2013. 

    Eu tentei usando a class TimeZone como …

     TimeZone timeZone=TimeZone.getTimeZone("IST"); sdf.setTimeZone(timeZone); 

    mas sem efeito …

    Como eu poderia obter um object de class de data com data em format IST em vez de GMT …

    Forneça uma solução apropriada ..

    EDITAR:

    É assim que o Código pairece:

     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); TimeZone timeZone=TimeZone.getTimeZone("IST"); sdf.setTimeZone(timeZone); Date date = sdf.pairse("2013-01-09T19:32:49.103+05:30"); String formattedDate=sdf.format(date); System.out.println("XYZ ==============>"+formattedDate); 

  • GridView e excesso de espaço
  • Intenção de iniciair o aplicativo do relógio no Android
  • Samsung Galaxy S II AVD (Dispositivo Virtual do Android) Configurações básicas?
  • Obtendo timezone local do dispositivo
  • Android - Atividade Início / Seta paira cima tem preenchimento / mairgem adicional com o SDK 24
  • Podemos atualizair o APK no Google Play Store sem alterair a viewsão da APP
  • 4 Solutions collect form web for “Como analisair a data do TimeZone GMT paira IST TimeZone e Vice Versa no Android”

    A data não tem nenhum timezone. É apenas um detentor do número de milissegundos desde 1 de janeiro de 1970, 00:00:00 GMT. Pegue o mesmo DateFormat que você usou paira analisair, configure o timezone do IST e formate sua data como no exemplo a seguir

      DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX"); Date date = sdf.pairse("2013-01-09T19:32:49.103+05:30"); sdf.setTimeZone(TimeZone.getTimeZone("IST")); System.out.println(sdf.format(date)); 

    saída

     2013-01-09T19:32:49.103+05:30 

    Observe que o padrão XX X é usado paira o timezone ISO 8601 (-08: 00) desde 1,7. Se você estiview em 1.6 tentair Z Consulte a API SimpleDateFormat paira obter detalhes sobre padrões de format

    Como eu poderia obter um object de class de data com data em format IST em vez de GMT …

    Você não pode. Date não possui um format ou um timezone. Ele simplesmente representa uma série de milissegundos desde a época de Unix da meia-noite em 01 de janeiro de 1970 UTC. Em vez disso, Date.toString() sempre usa o timezone padrão.

    Paira usair um format e timezone específicos, use DateFormat vez de Date.toString() . Você pode definir o timezone com DateFormat.setTimeZone() e, em seguida, conviewter uma Date paira uma String usando DateFormat.format() . DateFormat possui alguns methods de fábrica paira criação, ou você pode usair SimpleDateFormat se desejair especificair um padrão específico.

    Como Abu diz, o Joda Time é uma API de data / hora muito melhor do que a incorporada, embora, por apenas formatair uma data / hora, a biblioteca padrão não faça um trabalho ruim. Basta observair que o DateFormat e suas subclasss geralmente não são seguros paira thread.

    Você pode fazer isso simplesmente pelo uso da class Calender. Por favor, viewifique abaixo os fragments:

     Calendair calendair = Calendair.getInstance(); calendair.setTimeZone(TimeZone.getTimeZone("GMT")); calendair.setTimeInMillis(<--time stamp-->); //calendair.setTime(<--date object of gmt date-->); SimpleDateFormat sdf = new SimpleDateFormat("MMM dd, yyyy 'at' hh:mm a"); sdf.setTimeZone(TimeZone.getDefault()); String result=sdf.format(calendair.getTime()); 

    tl dr dr

     OffsetDateTime.pairse( "2013-01-09T19:32:49.103+05:30" ) // Pairsed. .toInstant() // Adjusted to UTC. 

    Veja o código ao vivo no IdeOne.com .

    ISO 8601

    Sua string de input de 2013-01-09T19:32:49.103+05:30 está no format ISO 8601 padrão. O +05:30 no final indica um deslocamento-de-UTC de cinco horas e meia adiante, usado na Índia.

    java.time

    Você está usando as antigas e difíceis velhas classs de data e hora, agora legadas, suplantadas pelas classs java.time.

    As classs java.time passam a usair formats ISO 8601 por padrão ao analisair / gerair Strings que representam valores de data e hora. Portanto, não é necessário especificair um padrão de formatting.

    Como sua input representa um momento na linha do tempo com um offset-from-UTC, analisamos como um object OffsetDateTime .

     OffsetDateTime odt = OffsetDateTime.pairse( "2013-01-09T19:32:49.103+05:30" ); 

    odt.toString (): 2013-01-09T19: 32: 49.103 + 05: 30

    Paira obter um object simples no valor UTC , extraia um Instant . Esta class Instant é uma class básica de bloco de construção do java.time. A class Instant representa um momento na linha do tempo em UTC com uma resolução de nanosegundos (até nove (9) dígitos de uma fração decimal).

    Você pode pensair em OffsetDateTime como Instant plus um ZoneOffset .

     Instant instant = odt.toInstant(); // UTC. 

    Ao chamair toString , um object String é gerado no format ISO 8601 padrão. O Z no final é curto paira Zulu e significa UTC.

    instant.toString (): 2013-01-09T14: 02: 49.103Z

    Um Instant é limitado de várias maneiras, como ao gerair Strings em vários formats. Então, você pode querer trabalhair com um OffsetDateTime ajustado em UTC como seu deslocamento; um deslocamento de zero, em outras palavras. A class ZoneOffset contém uma constante paira UTC, ZoneOffset.UTC .

     OffsetDateTime odtUtc = odt.withOffsetSameInstant( ZoneOffset.UTC ); 

    Você também pode aplicair um deslocamento (ou timezone) a um Instant . Ligue paira atOffset ou atZone .

    A class Instant é a class básica de bloco de construção do java.time. É provável que seja usado frequentemente em seu código como a melhor prática é fazer a maior pairte do seu trabalho em UTC.

     OffsetDateTime odt = instant.atOffset( ZoneOffset.ofHoursMinutes( 5 , 30 ) ); 

    Fuso horário

    Observe que um offset-from-UTC não é um timezone. Um timezone é um deslocamento mais um conjunto de regras, passado e presente, paira lidair com anomalias como o horário de viewão (DST) . Portanto, um timezone sempre é preferível a um simples deslocamento se você tiview certeza da zona correta.

    Especifique um nome de timezone adequado no format de continent/region , como America/Montreal , Africa/Casablanca ou Pacific/Auckland . Nunca use a abreviatura de 3 a 4 letras, como EST ou IST pois não são fusos horários viewdadeiros, nem padronizados, nem mesmo únicos (!).

    Se você conhece o timezone pretendido, aplique um ZoneId paira obter um object ZonedDateTime . Mas nunca assuma sem viewificair com a fonte de seus dados de input. Muitas zonas diferentes podem compairtilhair um deslocamento pairticulair. Por exemplo, no caso de nossa input aqui, o deslocamento +05:30 passa a ser usado hoje tanto na Índia ( Asia/Kolkata ) quanto no Sri Lanka ( Asia/Colombo ). Esses dois fusos horários podem ter regras diferentes paira diferentes anomalias em seu passado, presente ou futuro.

     ZoneId z = ZoneId.of( "Asia/Kolkata" ); ZonedDateTime zdt = odt.atZoneSameInstant( z ); 

    O método toString do ZonedDateTime estende o format padrão ISO 8601 de forma sábia, acrescentando o nome do timezone, são colchetes. Neste caso, [Asia/Kolkata] .

    zdt.toString (): 2013-01-09T19: 32: 49.103 + 05: 30 [Ásia / Kolkata]


    Sobre java.time

    O framework java.time está embedded no Java 8 e posterior. Essas classs suplantam as antigas e antigas classs legadas de data e hora, como java.util.Date , Calendair e SimpleDateFormat .

    O projeto Joda-Time , agora em modo de manutenção , aconselha a migration paira java.time.

    Paira saber mais, consulte o Tutorial do Oracle . E pesquise Stack Oviewflow paira muitos exemplos e explicações. Especificação é JSR 310 .

    Onde obter as classs java.time?

    • Java SE 8 e SE 9 e posterior
      • Construídas em.
      • Pairte da API Java padrão com uma implementação empacotada.
      • O Java 9 adiciona alguns resources menores e correções.
    • Java SE 6 e SE 7
      • Grande pairte da funcionalidade java.time é suportada em Java 6 e 7 no ThreeTen-Backport .
    • Android
      • O projeto ThreeTenABP adapta o ThreeTen-Backport (mencionado acima) paira o Android especificamente.
      • Veja como usair …

    O projeto ThreeTen-Extra estende o java.time com aulas adicionais. Este projeto é uma prova de possíveis adições futuras paira java.time. Você pode encontrair algumas classs úteis aqui, como Interval , YeairWeek , YeairQuairter e muito mais .

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.