如何在Android中将12hrs格式时间转换为utc

问题描述 投票:-1回答:3

将12小时时间格式转换为utc后得到错误的结果。

 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();
            }
android datetime-format utc
3个回答
1
投票

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明确转换为字符串。当您打印时,它以所需的格式以UTC进行打印,因此隐式调用了其toString方法(格式为ISO 8601,国际标准)。

请填写您所需的时区。要依赖设备的时区设置,请将zone设置为ZoneId.systemDefault()

我当然很高兴使用现代的Java日期和时间API java.time。您也可以在Android版本上执行此操作,请参见下面的详细信息。

问题:java.time是否不需要Android API 26级?

java.time在较新和较旧的Android设备上均可正常运行。它只需要至少Java 6

  • 在Java 8和更高版本以及更新的Android设备(来自API级别26)中,内置了现代API。
  • 在非Android Java 6和7中,获得了ThreeTen Backport,这是现代类的backport(JSR 310的ThreeTen;请参见底部的链接。
  • 在(较旧的)Android上,请使用Android版的ThreeTen Backport。叫做ThreeTenABP。并确保使用子包从org.threeten.bp导入日期和时间类。

链接


0
投票

请尝试此代码。它为我工作:

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);

0
投票
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);
}

您可以使用此代码获取当前UTC时间。

对于您的问题,您只需要将时间字符串转换为Date格式。

© www.soinside.com 2019 - 2024. All rights reserved.