【问题标题】:Time difference calculate between two difference Time Zone? [duplicate]两个不同时区之间的时差计算? [复制]
【发布时间】:2021-06-20 23:53:33
【问题描述】:

我想计算两个不同时区之间的时差,例如 country1 (GMT+05:30) 和 country2 (GMT+05:00)。如何计算它。提前致谢。

【问题讨论】:

    标签: java android kotlin timezone java-time


    【解决方案1】:

    您可以使用java.time.Duration 找到它,它以ISO-8601 standards 为模型,并作为JSR-310 implementation 的一部分与Java-8 一起引入。 Java-9 引入了一些更方便的方法。

    import java.time.Duration;
    import java.time.LocalDate;
    import java.time.OffsetDateTime;
    import java.time.ZoneId;
    import java.time.ZoneOffset;
    
    public class Main {
    
        public static void main(String[] args) {
            // Test
            System.out.println(formatDuration(diffBetweenTimeZones("GMT+05:30", "GMT+05:00")));
            System.out.println(formatDuration(diffBetweenTimeZones("GMT+05:00", "GMT+05:30")));
    
            // You can use the returned value to get the ZoneOffset which you can use for
            // various kinds of processing e.g.
            ZoneOffset offset = ZoneOffset.of(formatDuration(diffBetweenTimeZones("GMT+05:30", "GMT+05:00")));
            System.out.println(offset);
            System.out.println(OffsetDateTime.now(offset));
        }
    
        static Duration diffBetweenTimeZones(String tz1, String tz2) {
            LocalDate today = LocalDate.now();
            return Duration.between(today.atStartOfDay(ZoneId.of(tz1)), today.atStartOfDay(ZoneId.of(tz2)));
        }
    
        static String formatDuration(Duration duration) {
            long hours = duration.toHours();
            long minutes = duration.toMinutes() % 60;
            String symbol = hours < 0 || minutes < 0 ? "-" : "+";
            return String.format(symbol + "%02d:%02d", Math.abs(hours), Math.abs(minutes));
    
            // ####################################Java-9####################################
            // return String.format(symbol + "%02d:%02d", Math.abs(duration.toHoursPart()),
            // Math.abs(duration.toMinutesPart()));
            // ####################################Java-9####################################
        }
    }
    

    输出:

    +00:30
    -00:30
    +00:30
    2021-03-24T10:37:31.056405+00:30
    

    Trail: Date Time 了解有关现代日期时间 API 的更多信息。

    请注意,java.util 日期时间 API 已过时且容易出错。建议彻底停止使用,改用modern date-time API*


    * 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用 ThreeTen-Backport 将大部分 java.time 功能反向移植到 Java 6 和 7 . 如果您正在为一个 Android 项目工作并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaringHow to use ThreeTenABP in Android Project

    【讨论】:

      猜你喜欢
      • 2018-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多