【问题标题】:Difference between two datetime formats in android?android中两种日期时间格式之间的区别?
【发布时间】:2012-11-04 05:16:13
【问题描述】:

由于我是 android 开发新手,我无法找到用于计算两种日期时间格式之间差异的代码。我的问题是。

我在我的项目中使用 web 服务,我得到如下日期时间响应..

 starttime  :- [2012-11-04 10:00:00]
 endtime    :- [2012-11-04 12:00:00]

这里我想在屏幕上显示为

   Today Timings  :-  2012-11-04   2 hours

表示需要计算两个日期之间的时间差,并需要在屏幕上显示时间差。

谁能帮我解决这个问题。

【问题讨论】:

  • 您是否要同时获取时间和日期差异?还是只是时间?
  • 我只想要时差,需要显示上面提到的开始时间。在这种模式中“今天计时:- 2012-11-04 2 小时”

标签: android datetime-format android-datepicker


【解决方案1】:

如果您知道获取日期时间对象的确切格式,您可以在 Android 中使用SimpleDateFormat class,它允许您根据字符串中表示的日期格式将字符串解析为日期。对于您的问题:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date startTime = sdf.parse(<startTime/endTime String>, 0);

类似地解析你的结束时间,然后可以使用单个对象的 getTime() 获得差异。

long diff = endTime.getTime() - startTime.getTime()

然后,只需使用以下方法将差值转换为小时即可:

int hours = (int)(diff/(60*60*1000));

希望对您有所帮助。

【讨论】:

  • 谢谢老哥,问题解决了。我想要的另一件事是根据我的问题,我需要将日期与 startTime 字符串分开,并且需要像这样显示“2012-11-04 2 hours”。那么,我该怎么做呢..?
  • 抱歉错过了我猜的那部分。使用 Java 的 substring 方法获取包含您的 Date 字符串的字符串。文档将此方法作为 String substring(int startIndex, int endIndex) 所以对于 starttime :- [2012-11-04 10:00:00] 这将类似于 timeString = inputString.substring(15, inputString.length());
【解决方案2】:

java.time

使用现代 API java.time 的解决方案:

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("u-M-d H:m:s", Locale.ENGLISH);
        LocalDateTime startTime = LocalDateTime.parse("2012-11-04 10:00:00", dtf);
        LocalDateTime endTime = LocalDateTime.parse("2012-11-04 12:00:00", dtf);
        long hours = ChronoUnit.HOURS.between(startTime, endTime);
        System.out.println(hours);
    }
}

输出:

2

Trail: Date Time 了解有关 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

【讨论】:

    【解决方案3】:

    如果您使用java.util.Date;,您将不得不使用中间变量。您可以将您的日期转换为 long 值并减去这些值,然后将您的 long 转换回日期。

        long diff = new Date().getTime() - new Date(milliseconds).getTime();
        Date dateDiff = new Date(diff);
    

    但是应该警告您,它不考虑夏令时和其他任何变量。如果你这么细心,你可能会沉迷于这个replacement date class.它有你想要的功能。

    【讨论】:

      【解决方案4】:

      我使用此代码来获取两个日期的差异。

      public void getTimeDifference(Date endDate,Date startDate) {
                  Date diff = new Date(endDate.getTime() - startDate.getTime());
                  Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
                  calendar.setTime(diff);
                  int day=calendar.get(Calendar.DAY_OF_MONTH);
                  int hours = calendar.get(Calendar.HOUR_OF_DAY);
                  }
              }
      

      【讨论】:

        猜你喜欢
        • 2010-10-25
        • 1970-01-01
        • 1970-01-01
        • 2022-10-13
        • 1970-01-01
        • 2020-10-19
        • 2017-09-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多