Java 计算两次之间的差值
我正在开发android应用程序,我需要计算两次之间的时间差。我需要计算24小时的时间差,以及两天的时间差(例如今天下午5点到明天上午9点) 我已经尝试了下面的代码,以计算仅在24小时内有效的差异Java 计算两次之间的差值,java,android,date,time,simpledateformat,Java,Android,Date,Time,Simpledateformat,我正在开发android应用程序,我需要计算两次之间的时间差。我需要计算24小时的时间差,以及两天的时间差(例如今天下午5点到明天上午9点) 我已经尝试了下面的代码,以计算仅在24小时内有效的差异 String dateStart = "08:00:00"; String dateStop = "13:00:00"; //HH converts hour in 24 hours format (0-23), day calculation SimpleDateFormat format = n
String dateStart = "08:00:00";
String dateStop = "13:00:00";
//HH converts hour in 24 hours format (0-23), day calculation
SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");
Date d1 = null;
Date d2 = null;
try
{
d1 = format.parse(dateStart);
d2 = format.parse(dateStop);
//in milliseconds
long diff = d2.getTime() - d1.getTime();
long diffHours = diff / (60 * 60 * 1000) % 24;
Log.e("test",diffHours + " hours, ");
}
catch (Exception e)
{
// TODO: handle exception
}
先生,您可以轻松地使用java特性<代码>长差=date2.getTime()-date1.getTime()代码>看看这个,这会对你有所帮助 如果您确定第二天是上午9点,您也可以尝试这样做,您可以添加一天并计算差值:
String string1 = "05:00:00 PM";
Date time1 = new SimpleDateFormat("HH:mm:ss aa").parse(string1);
Calendar calendar1 = Calendar.getInstance();
calendar1.setTime(time1);
String string2 = "09:00:00 AM";
Date time2 = new SimpleDateFormat("HH:mm:ss aa").parse(string2);
Calendar calendar2 = Calendar.getInstance();
calendar2.setTime(time2);
calendar2.add(Calendar.DATE, 1);
Date x = calendar1.getTime();
Date xy = calendar2.getTime();
long diff = x.getTime() - xy.getTime();
diffMinutes = diff / (60 * 1000);
float diffHours = diffMinutes / 60;
System.out.println("diff hours" + diffHours);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm:ss");
Date startDate = simpleDateFormat.parse("22:00:59");
Date endDate = simpleDateFormat.parse("23:00:10");
long difference = endDate.getTime() - startDate.getTime();
if(difference<0)
{
Date dateMax = simpleDateFormat.parse("24:00:00");
Date dateMin = simpleDateFormat.parse("00:00:00");
difference=(dateMax.getTime() -startDate.getTime() )+(endDate.getTime()-dateMin.getTime());
}
int days = (int) (difference / (1000*60*60*24));
int hours = (int) ((difference - (1000*60*60*24*days)) / (1000*60*60));
int min = (int) (difference - (1000*60*60*24*days) - (1000*60*60*hours)) / (1000*60);
int sec = (int) (difference - (1000*60*60*24*days) - (1000*60*60*hours) - (1000*60*min)) / (1000);
Log.i("log_tag","Hours: "+hours+", Mins: "+min+", Secs: "+sec);
我是这样想的:
Date time1 = new SimpleDateFormat("HH:mm:ss aa").parse(string1);
Calendar calendar1 = Calendar.getInstance();
calendar1.setTime(time1);
Date time2 = new SimpleDateFormat("HH:mm:ss aa").parse(string2);
Calendar calendar2 = Calendar.getInstance();
calendar2.setTime(time2);
if(calendar2.get(Calendar.AM_PM) == 1 && calendar1.get(Calendar.AM_PM) == 0) {
calendar2.add(Calendar.DATE, 1);
}
long diff = calendar1.getTimeInMillis() - calendar2.getTimeInMillis()
这将有助于发现昼夜的时差。找到适当时差的正确方法:
String string1 = "05:00:00 PM";
Date time1 = new SimpleDateFormat("HH:mm:ss aa").parse(string1);
Calendar calendar1 = Calendar.getInstance();
calendar1.setTime(time1);
String string2 = "09:00:00 AM";
Date time2 = new SimpleDateFormat("HH:mm:ss aa").parse(string2);
Calendar calendar2 = Calendar.getInstance();
calendar2.setTime(time2);
calendar2.add(Calendar.DATE, 1);
Date x = calendar1.getTime();
Date xy = calendar2.getTime();
long diff = x.getTime() - xy.getTime();
diffMinutes = diff / (60 * 1000);
float diffHours = diffMinutes / 60;
System.out.println("diff hours" + diffHours);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm:ss");
Date startDate = simpleDateFormat.parse("22:00:59");
Date endDate = simpleDateFormat.parse("23:00:10");
long difference = endDate.getTime() - startDate.getTime();
if(difference<0)
{
Date dateMax = simpleDateFormat.parse("24:00:00");
Date dateMin = simpleDateFormat.parse("00:00:00");
difference=(dateMax.getTime() -startDate.getTime() )+(endDate.getTime()-dateMin.getTime());
}
int days = (int) (difference / (1000*60*60*24));
int hours = (int) ((difference - (1000*60*60*24*days)) / (1000*60*60));
int min = (int) (difference - (1000*60*60*24*days) - (1000*60*60*hours)) / (1000*60);
int sec = (int) (difference - (1000*60*60*24*days) - (1000*60*60*hours) - (1000*60*min)) / (1000);
Log.i("log_tag","Hours: "+hours+", Mins: "+min+", Secs: "+sec);
SimpleDateFormat SimpleDateFormat=新的SimpleDateFormat(“HH:mm:ss”);
Date startDate=simpleDateFormat.parse(“22:00:59”);
Date endDate=simpleDataFormat.parse(“23:00:10”);
长差=endDate.getTime()-startDate.getTime();
如果(差异)L;dr
五,
……或者
ChronoUnit.HOURS.between(
ZonedDateTime.of(
LocalDate.of( 2017 , Month.JANUARY , 23 ) ,
LocalTime.parse( "08:00:00" ) ,
ZoneId.of( "America/Montreal" )
) ,
ZonedDateTime.of(
LocalDate.of( 2017 , Month.JANUARY , 25 ) ,
LocalTime.parse( "13:00:00" ) ,
ZoneId.of( "America/Montreal" )
)
)
五十三
java.time
现代方法使用java.time类
LocalTime
该类表示一天中没有日期和时区的时间
LocalTime start = LocalTime.parse( "08:00:00" ) ;
LocalTime stop = LocalTime.parse( "13:00:00" ) ;
持续时间
获取表示时间跨度的对象
Duration d = Duration.between( start , stop ) ;
ChronoUnit
对于小时数,请使用
安卓
对于Android,请参阅三个Backport和三个TenABP项目。请参阅下面的最后一个项目符号
ZoneDateTime
如果要跨越几天,超过午夜,则必须指定日期和时区
时区对于确定日期至关重要。对于任何给定的时刻,全球各地的日期都因区域而异。例如,年午夜后几分钟是新的一天,而年仍然是“昨天”
请以大陆/地区
的格式指定一个,例如,或太平洋/奥克兰
。切勿使用3-4个字母的缩写,例如EST
或IST
,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)
看这个
五十三
关于java.time
该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,如,&
该项目现已启动,建议迁移到类
要了解更多信息,请参阅.和搜索堆栈溢出以获取许多示例和解释。规范为
从哪里获得java.time类
- ,及以后
- 内置的
- 标准JavaAPI的一部分,带有捆绑实现
- Java9添加了一些次要功能和修复
- 及
- 大部分java.time功能都在中向后移植到Java6和Java7
-
- 该项目专门为Android采用了ThreeTen Backport(如上所述)
- 看
检查。希望有帮助。我尝试了这个链接,但我没有提供日期和输入,我只需要使用时间来获取时差。我可以提供am或pm值。好的,在后台设置日期并传递它。当你从中传递am/pm时,你可以将第二次的日期更新到明天/今天。你明白我的意思了吗?很好回答,帮帮我:)太棒了!我真的很喜欢你处理更改日期的方式嗨,如何以相同的格式获得秒数,如小时,分钟?@Naveen抱歉,我更新了上面的答案以计算秒数,希望这对你和其他人也有帮助。太棒了,这应该是公认的答案。当我从下午13:00到上午11:00尝试时,它不起作用
long hours = ChronoUnit.HOURS.between( start , stop ) ;
ZoneId z = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime start = ZonedDateTime.of(
LocalDate.of( 2017 , Month.JANUARY , 23 ) ,
LocalTime.parse( "08:00:00" ) ,
z
) ;
ZonedDateTime stop = ZonedDateTime.of(
LocalDate.of( 2017 , Month.JANUARY , 25 ) ,
LocalTime.parse( "13:00:00" ) ,
z
) ;
long hours = ChronoUnit.HOURS.between( start , stop ) ;