Java 如何在android中获得2次之间的差异
我想找出当前系统时间和插入数据之间的差异&timeJava 如何在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);
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.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