Affichage de la date / heure dans le fuseau horaire des périphériques sur Android en utilisant Kotlin

voix
-1

Donc, mon application va chercher de l'information à partir d'un fichier JSON à partir d'un serveur, dont il existe quelques valeurs de date / heure. L'heure et la date sont en UTC. Je dois montrer ce dans mon application, dans le fuseau horaire local utilisateurs.

Exemple de données de JSON:

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

Mon code à ce jour, qui affiche la date et fin du temps, en 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)

Comment puis-je aller sur l'affichage de ces données en utilisant le fuseau horaire de périphériques? J'ai été googler pendant des heures.

En utilisant l'exemple ci-dessus, mon application montre « 20 octobre » pour la date, et « 3 heures-5 heures » pour le moment. Dans mon cas, je vis en Australie (GMT + 10), donc je me attends à ce jour « 20 octobre » et « 13 heures-15 heures ». En bref, je veux détecter le fuseau horaire de l'utilisateur décalé par rapport à l'heure UTC et l'appliquer pour l'affichage.

Créé 20/10/2018 à 02:40
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
0

java.time et 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);

Je suis désolé, je ne vous écris pas Kotlin. Pouvez-vous traduire de Java sur votre propre? Quand je lance le code ci-dessus sur une machine virtuelle Java avec fuseau horaire par défaut Australie / Brisbane il affiche:

Start day:  20 Oct
Start hour: 1PM

Il suffit de faire de même pour la date et heure de fin.

Question: Puis-je utiliser java.time sur Android?

Oui, java.time fonctionne très bien sur les appareils plus anciens et plus récents Android. Il faut juste au moins Java 6 .

  • En Java 8 et versions ultérieures et sur les nouveaux appareils Android (de niveau API 26) l'API moderne est intégré.
  • En Java 6 et 7 obtenir le ThreeTen Backport, la backport des nouvelles classes (ThreeTen pour JSR 310, voir les liens en bas).
  • On (plus) Android utiliser l'édition Android de ThreeTen Backport. Il est appelé ThreeTenABP. Et assurez-vous d' importer les classes de date et l' heure org.threeten.bpavec des sous - paquets.

Liens

Créé 22/10/2018 à 14:02
source utilisateur

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