как преобразовать время формата 12 часов в ut c в android - PullRequest
0 голосов
/ 27 мая 2020

получение неверных результатов после преобразования 12-часового формата времени в ut c.

 String inputPa = "hh:mm a";
            String OutPa = "yyyy-MM-dd'T'HH:mm:ss'Z'";
            SimpleDateFormat inputPatter = new SimpleDateFormat(inputPa);
            SimpleDateFormat outputPatter = new SimpleDateFormat(OutPa);

            Date date1 = null;
            String str1 = null;

            try {
                date1 = inputPatter.parse(txtStartTime.getText().toString());
                str1 = outputPatter.format(date1);
                Log.d("mycheck", str1);

            } catch (ParseException e) {
                e.printStackTrace();
            }

Ответы [ 3 ]

1 голос
/ 30 мая 2020

java .time и ThreeTenABP

Я предполагал, что вам нужна сегодняшняя дата в вашем часовом поясе.

    String inputPa = "hh:mm a";
    DateTimeFormatter timeFormatter12Hours = DateTimeFormatter.ofPattern(inputPa, Locale.ENGLISH);
    ZoneId zone = ZoneId.of("America/Detroit");

    String timeString = "11:34 AM";

    LocalTime time = LocalTime.parse(timeString, timeFormatter12Hours);
    Instant inst = LocalDate.now(zone).atTime(time).atZone(zone).toInstant();

    System.out.println(inst);

Результат этого примера:

2020-05-30T15: 34: 00Z

Я бы не стал явно преобразовывать Instant в строку. Он печатается в UT C в желаемом формате при печати, таким образом неявно вызывая свой метод toString (формат - ISO 8601, международный стандарт).

Пожалуйста, укажите желаемый часовой пояс. Чтобы полагаться на настройки часового пояса устройства, установите zone на ZoneId.systemDefault().

Я, конечно, счастлив использовать java .time, современный Java API даты и времени. Вы можете сделать это и в своей версии Android, см. Подробности ниже.

Вопрос: Разве java .time не требует Android уровня API 26?

java .time прекрасно работает как на старых, так и на новых устройствах Android. Для этого просто требуется как минимум Java 6 .

  • В Java 8 и новее и на новых Android устройствах (с уровня API 26) современный API построен -в.
  • В не- Android Java 6 и 7 получите ThreeTen Backport, бэкпорт современных классов (ThreeTen для JSR 310; см. ссылки внизу).
  • На (более ранней) Android используйте Android версию ThreeTen Backport. Это называется ThreeTenABP. И убедитесь, что вы импортировали классы даты и времени из org.threeten.bp с подпакетами.

Ссылки

0 голосов
/ 27 мая 2020
public tring getCurrentUTC(Date time) {
    SimpleDateFormat outputFmt = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
    outputFmt.setTimeZone(TimeZone.getTimeZone("UTC"));
    return outputFmt.format(time);
}

Вы можете использовать этот код для получения текущего UT C время.

На ваш вопрос, вам просто нужно преобразовать строку времени в формат Date.

0 голосов
/ 27 мая 2020

Пожалуйста, попробуйте этот код. это сработало для меня:

Date myDate = new Date();

Calendar calendar = Calendar.getInstance();
calendar.setTimeZone(TimeZone.getTimeZone("UTC"));
calendar.setTime(myDate);
Date time = calendar.getTime();
SimpleDateFormat outputFmt = new SimpleDateFormat("MMM dd, yyy h:mm a zz");
String dateAsString = outputFmt.format(time);
System.out.println(dateAsString);
...