Java 如何在android中获得2次之间的差异

Java 如何在android中获得2次之间的差异,java,android,calendar,Java,Android,Calendar,我想找出当前系统时间和插入数据之间的差异&timeString。我试过这个: try { String strFileDate = "2012-04-19 15:15:00"; DateFormat formatter2 = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss"); Date date = formatter2.parse(strFileDate);

我想找出当前系统时间和插入数据之间的差异&time
String
。我试过这个:

 try {

            String strFileDate = "2012-04-19 15:15:00";
            DateFormat formatter2 = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss");
            Date date = formatter2.parse(strFileDate);
            long difference = date.getTime() - System.currentTimeMillis();
            Calendar calendar = Calendar.getInstance();
            calendar.setTimeInMillis(difference);
            Toast.makeText(getBaseContext(),
                    formatter2.format(calendar.getTime()), Toast.LENGTH_LONG)
                    .show();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
但它并没有给我正确的结果。我做得对吗

更新 我试着说:

String strFileDate = "2012-04-19 15:15:00";
            DateFormat formatter2 = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss");
            Date date = formatter2.parse(strFileDate);
            long diffInMs = date.getTime()
                    - new Date(System.currentTimeMillis()).getTime();

            long diffInSec = TimeUnit.MILLISECONDS.toSeconds(diffInMs);

            long hour = diffInSec / (1000 * 60 * 60);
            double minutes = diffInSec / (1000 * 60);
            // long diffInHour = TimeUnit.to(diffInMs);

            Toast.makeText(getBaseContext(),
                    "left time is :: " + hour + ":" + minutes,
                    Toast.LENGTH_LONG).show();
输出:: 左侧时间为:--2:-131.0

更新(20/4/2012) }

输出:: 04-20 12:48:06.629: 信息/日期为::>>>(1295):2183小时38分钟
  • 你得到了什么输出
  • 你期望什么样的产出
  • 查看是否需要此时间(以秒为单位)。

    • 你得到了什么输出
    • 你期望什么样的产出

    查看是否需要以秒为单位的时间。

    使用JodaTime计算时段(时差)

    使用JodaTime计算时段(时差)

    使用TimeUnit获取秒数。

    编辑:

    得到

    使用TimeUnit获取秒数。

    编辑:

    得到

    为了在一小时内获得差异

    double hour = difference/(1000*60*60);
    double minutes = difference/(1000*60);
    
    为了在一小时内获得差异

    double hour = difference/(1000*60*60);
    double minutes = difference/(1000*60);
    
    tl;博士 514

    时区 您的代码忽略了时区这一关键问题

    java.util.Date
    类表示UTC中的一个时刻。同时,您的输入字符串“2012-04-19 15:15:00”缺少任何时区或UTC偏移的指示符。您必须显式地将该值放入预期/期望的分区/偏移的上下文中,否则这些遗留类将隐式地应用分区/偏移

    java.time 现代方法使用java 8及更高版本中内置的java.time类

    您的输入几乎符合标准ISO 8601格式。切换中间的空间为<代码> t>代码>

    String input = "2012-04-19 15:15:00".replace( " " , "T" ) ;  // Convert to ISO 8601 format.
    
    解析为
    LocalDateTime
    对象,因为您的输入缺少区域或偏移量

    LocalDateTime ldt = LocalDateTime.parse( input ) ;
    
    应用您确定用于该输入的分区或偏移

    OffsetDateTime odt = ldt.atOffset( ZoneOffset.UTC ) ; // Or some other offset.
    
    ……或者

    ZoneId z = ZoneId.of( "Africa/Tunis" ) ;
    ZonedDateTime zdt = ldt.atZone( z ) ;
    
    如果要将两个时刻之间的增量作为时间跨度,而不附加到按小时分秒缩放的时间线,请计算一个时间跨度

    类似,但以年、月、日为单位,使用。提取
    LocalDate
    dateonly对象以提供
    Period
    的工厂方法

    Period p = Period.between( start.toLocalDate() , stop.toLocalDate() ) ;
    
    总运行时间 如果您想要一个总运行分钟数、秒数等,请在
    ChronoUnit
    枚举上使用
    ChronoUnit::between
    方法

    long totalMinutes = ChronoUnit.MINUTES.between( start , stop ) ;  // Calculate total number of minutes in entire span of time.
    
    生成字符串 在中生成一个字符串。只需调用
    Duration::toString
    Period::toString

    格式为
    PnYnMnDTnHnMnS
    ,其中
    p
    标记开始,并且
    T
    将任何年、月、日与任何时、分、秒分开

    String output = d.toString() ;
    
    您可以通过调用各种getter方法来查询部件

    提示:如果您的工作时间跨度很大,请在项目中添加三个额外的库,以使用
    Interval
    LocalDateRange


    关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

    该项目现已启动,建议迁移到类

    要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

    您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要
    java.sql.*

    从哪里获得java.time类

    • ,及以后
      • 内置的
      • 标准JavaAPI的一部分,带有捆绑实现
      • Java9添加了一些次要功能和修复
      • 大部分java.time功能都在中向后移植到Java6和Java7
      • 更高版本的Android捆绑包实现了java.time类
      • 对于早期的Android,该项目采用了ThreeTen Backport(如上所述)。看
    该项目使用其他类扩展了java.time。这个项目是java.time将来可能添加的一个试验场。您可以在这里找到一些有用的类,如、、和。

    tl;博士 514

    时区 您的代码忽略了时区这一关键问题

    java.util.Date
    类表示UTC中的一个时刻。同时,您的输入字符串“2012-04-19 15:15:00”缺少任何时区或UTC偏移的指示符。您必须显式地将该值放入预期/期望的分区/偏移的上下文中,否则这些遗留类将隐式地应用分区/偏移

    java.time 现代方法使用java 8及更高版本中内置的java.time类

    您的输入几乎符合标准ISO 8601格式。切换中间的空间为<代码> t>代码>

    String input = "2012-04-19 15:15:00".replace( " " , "T" ) ;  // Convert to ISO 8601 format.
    
    解析为
    LocalDateTime
    对象,因为您的输入缺少区域或偏移量

    LocalDateTime ldt = LocalDateTime.parse( input ) ;
    
    应用您确定用于该输入的分区或偏移

    OffsetDateTime odt = ldt.atOffset( ZoneOffset.UTC ) ; // Or some other offset.
    
    ……或者

    ZoneId z = ZoneId.of( "Africa/Tunis" ) ;
    ZonedDateTime zdt = ldt.atZone( z ) ;
    
    如果要将两个时刻之间的增量作为时间跨度,而不附加到按小时分秒缩放的时间线,请计算一个时间跨度

    类似,但以年、月、日为单位,使用。提取
    LocalDate
    dateonly对象以提供
    Period
    的工厂方法

    Period p = Period.between( start.toLocalDate() , stop.toLocalDate() ) ;
    
    总运行时间 如果您想要一个总运行分钟数、秒数等,请在
    ChronoUnit
    枚举上使用
    ChronoUnit::between
    方法

    long totalMinutes = ChronoUnit.MINUTES.between( start , stop ) ;  // Calculate total number of minutes in entire span of time.
    
    生成字符串 在中生成一个字符串。只需调用
    Duration::toString
    Period::toString

    格式为
    PnYnMnDTnHnMnS
    ,其中
    p
    标记开始,并且
    T
    将任何年、月、日与任何时、分、秒分开

    String output = d.toString() ;
    
    您可以通过调用各种getter方法来查询部件

    提示:如果你的工作时间跨度很大,请添加t