如何获取用户在 EditText 中输入的时间并从中扣除 5 小时 30 分钟?

How to get time entered by user in EditText and deduct 5 hrs 30 minutes from it?

我有两个编辑文本供用户输入时间(24 小时格式)。 我如何从 Edittext 中获取这些时间并从用户选择的时间中扣除 5 小时 30 分钟。

扣除时间的原因:将 IST 转换为 UTC 时区。

我的最终输出应该是 - HH:MM:SS:Milleseconds(例如:18:25:30:245635)。

提前致谢。

java.time

    ZoneId zone = ZoneId.of("Asia/Kolkata");
    String timeString = "18:25:30.245635";
    LocalTime time = LocalTime.parse(timeString);
    LocalTime utcTime = LocalDate.now(zone)        // Today
            .atTime(time)                          // Today at the time in question
            .atZone(zone)                          // Date and time in IST
            .toOffsetDateTime()                    // Convert to OffsetDateTime for the next step
            .withOffsetSameInstant(ZoneOffset.UTC) // Convert to UTC
            .toLocalTime();                        // Extract only the time of day
    System.out.println("UTC time: " + utcTime);

输出为:

UTC time: 12:55:30.245635

我假设了今天的日期。请检查此假设是否适合您。虽然 Asia/Kolkata 的 UTC 偏移量最近没有太大变化,但其他时区每年两次更改其偏移量。

我将您的时间格式更改为在秒和秒的小数部分之间使用句点(点),而不是按照惯例在秒和小数部分之间使用冒号。如果您确实需要冒号,则需要 DateTimeFormatter 进行解析。

问题:我可以在 Android 上使用 java.time 吗?

是的,java.time 在新旧 Android 设备上都能很好地工作。它只需要至少 Java 6.

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

链接