我怎么能找到2个字符串之间的经过时间?

时间:2014-04-05 03:27:50

标签: android string time timepicker elapsedtime

在解决这个问题时遇到了一些麻烦。 我正在为自己制作一个工作时钟来帮助计算当天工作的小时数。 我有两个选择器,一个用于开始时间,一个用于完成时间。 两个选择器都将所选时间格式化为字符串。现在我只需要找到起始字符串和结束字符串之间传递的小时数。我没有在日期变更工作,所以不需要计算以前困扰我的日期/日期 - > Calculate date/time difference in java

这些是我的挑选听众。

private TimePickerDialog.OnTimeSetListener startPickerListener = new TimePickerDialog.OnTimeSetListener() {

    public void onTimeSet(TimePicker view, int selectedHour, int selectedMinute) {
        startHour = selectedHour;
        startMinute = selectedMinute;

        startTime.setText(new StringBuilder().append(padding_str(startHour)).append(":").append(padding_str(startMinute)));

    }
};
private TimePickerDialog.OnTimeSetListener finishPickerListener = new TimePickerDialog.OnTimeSetListener() {

    public void onTimeSet(TimePicker view, int selectedHour, int selectedMinute) {
        finishHour = selectedHour;
        finishMinute = selectedMinute;

        finishTime.setText(new StringBuilder().append(padding_str(finishHour)).append(":").append(padding_str(finishMinute)));

    }
};

任何帮助都会非常感激!干杯! (如果您需要更多信息,请知道。)

2 个答案:

答案 0 :(得分:0)

如果使用SimpleDateFormat将字符串导入日期,则可以轻松计算时间差异。像这样:

Date startDate = new SimpleDateFormat("HH:mm", Locale.ENGLISH).parse(startHour + ":" + startMinute);
Date endDate = new SimpleDateFormat("HH:mm", Locale.ENGLISH).parse(endHour + ":" + endMinute);
long milliDiff = endDate - startDate;
long hoursDiff = milliDiff / (60 * 60 * 1000); //Convert millisecond of difference into hours

即使您碰巧在日期更改上工作,这也应该有效,因为毫秒是从1970年1月1日开始计算的,而不是从当天开始计算的。

答案 1 :(得分:0)

一天≠24小时

您可能需要约会。由于夏令时(DST)和其他异常,一天可能并不总是24小时。例如,在美国,可能是23小时,24小时或25小时。

但是如果您确定要在24小时内工作,那么请使用LocalTime中的Joda-Time类或Java 8中的新java.time package。java.util。与Java捆绑的Date和.Calendar类是众所周知的麻烦,应该避免。 (因此在Java 8中需要java.time)

java.time

java.time框架包含一个类似于Joda-Time的LocalTime类。

LocalTime start = LocalTime.of( 9 , 0 );
LocalTime stop = LocalTime.of( 13 , 0 );

Duration类以秒和纳秒为单位跟踪时间跨度。请参阅Oracle Tutorial

Duration duration = Duration.between( start , stop );

奇怪的是,在Java 8中,Duration类缺少获取小时数部分,分钟数等部分的方法。您可以将总数作为总小时数和总分钟数得出,自己做数学。 Java 9通过新的“获取部分”方法纠正了这种缺陷。

约达时间

您应该在StackOverflow.com上搜索“joda解析时间”和“joda经过时间”。但为了让你前进,这里有一些Joda-Time 2.3代码在我的头顶(没有经过测试,只是输入)。

LocalTime start = new LocalTime( 13, 10 );
LocalTime stop = new LocalTime( 13, 14 );
int minutesBetween = Minutes.minutesBetween( start, stop ).getMinutes();
Period period = new Period( start, stop );
Duration duration = period.toDuration();

如果这是您的目标,可以查询Period对象数小时。

尝试在这些对象上调用toString方法。搜索StackOverflow以了解更多信息。