Exibindo data / hora em dispositivos de fuso horário no Android usando Kotlin

votos
-1

Então meu aplicativo busca de informações de um arquivo JSON de um servidor, de que existem alguns valores de data / hora. A hora ea data estão em UTC. Eu preciso para exibir estes em meu aplicativo, na usuários fuso horário local.

Exemplo dos dados de JSON:

start:2018-10-20 03:00:00,finish:2018-10-20 05:00:00

Meu código até agora, que exibem a data e hora bem, no UTC ..

val dateStringStart = radioScheduleDMList.get(position).start
        val dateStringEnd = radioScheduleDMList.get(position).finish

        val date = SimpleDateFormat(yyyy-MM-dd hh:mm:ss, Locale.getDefault()).parse(dateStringStart)
        val dateEnd = SimpleDateFormat(yyyy-MM-dd hh:mm:ss, Locale.getDefault()).parse(dateStringEnd)
        val day = SimpleDateFormat(d MMM).format(date)
        val startDate = SimpleDateFormat(ha).format(date)
        val endDate = SimpleDateFormat(ha).format(dateEnd)

Como posso ir sobre a exibição de dados usando o fuso horário dispositivos? Estive pesquisando por horas.

Usando o exemplo acima, meu aplicativo mostra 20 de outubro para a data, e três horas - cinco horas para a época. No meu caso, eu moro na Austrália (GMT + 10) para que eu esperaria dia 20 de outubro e uma horas - três horas. Em suma, eu quero detectar fuso horário do usuário deslocamento do UTC e aplicá-lo para exibição.

Publicado 20/10/2018 em 02:40
fonte usuário
Em outras línguas...                            


1 respostas

votos
0

java.time e ThreeTenABP

    DateTimeFormatter jsonFormatter = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss");
    DateTimeFormatter dateFormatter
            = DateTimeFormatter.ofPattern("d MMM", Locale.forLanguageTag("en-AU"));
    DateTimeFormatter hourFormatter
            = DateTimeFormatter.ofPattern("ha", Locale.forLanguageTag("en-AU"));
    ZoneId zone = ZoneId.systemDefault();

    String dateStringStart = "2018-10-20 03:00:00";

    OffsetDateTime startDateTime = LocalDateTime.parse(dateStringStart, jsonFormatter)
            .atOffset(ZoneOffset.UTC);
    ZonedDateTime userStartDateTime = startDateTime.atZoneSameInstant(zone);
    String startDayString = userStartDateTime.format(dateFormatter);
    String startTimeString = userStartDateTime.format(hourFormatter);
    System.out.println("Start day:  " + startDayString);
    System.out.println("Start hour: " + startTimeString);

Me desculpe, eu não escrevo Kotlin. você pode traduzir do Java em seu próprio país? Quando eu executar o código acima em uma JVM com fuso horário padrão Austrália / Brisbane ele gera:

Start day:  20 Oct
Start hour: 1PM

Basta fazer da mesma forma para a data e hora final.

Pergunta: Posso usar java.time no Android?

Sim, java.time funciona muito bem em dispositivos Android mais antigos e mais recentes. Ele só exige pelo menos Java 6 .

  • Em Java 8 e posterior e em dispositivos Android mais recentes (de nível API 26), a API moderna vem embutido.
  • Em Java 6 e 7 de obter o ThreeTen Backport, o backport das novas classes (ThreeTen para JSR 310; veja os links na parte inferior).
  • On (mais velho) Android usar a edição Android da ThreeTen Backport. É chamado ThreeTenABP. E certifique-se de importar os de data e hora classes a partir org.threeten.bpde subpacotes.

ligações

Respondeu 22/10/2018 em 14:02
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more