Java 如何以毫秒为单位获取计时器拾取的时间,并比较android中两个计时器之间的时差?
我已经研究了许多示例并尝试了这种方法,但它并没有得到正确的输出。非常感谢您的帮助。谢谢,非常感谢您对代码或新代码所做的任何更正。根据我所掌握的所有知识,我尝试了以下方法,我也尝试了SimpleDateFormat函数,但每次选择时间都花了1970年1月1日Java 如何以毫秒为单位获取计时器拾取的时间,并比较android中两个计时器之间的时差?,java,android,time,timepicker,milliseconds,Java,Android,Time,Timepicker,Milliseconds,我已经研究了许多示例并尝试了这种方法,但它并没有得到正确的输出。非常感谢您的帮助。谢谢,非常感谢您对代码或新代码所做的任何更正。根据我所掌握的所有知识,我尝试了以下方法,我也尝试了SimpleDateFormat函数,但每次选择时间都花了1970年1月1日 import androidx.appcompat.app.AppCompatActivity; import android.app.TimePickerDialog; import android.content.Context; im
import androidx.appcompat.app.AppCompatActivity;
import android.app.TimePickerDialog;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;
import com.google.firebase.Timestamp;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.FirebaseFirestoreSettings;
import java.security.CodeSigner;
import java.sql.Time;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
//import java.util.Date;
public class HourlyCalculator extends AppCompatActivity {
EditText wage;
TextView t1, t2, t3;
ImageView i1, i2;
Button b1;
String timex;
String timey;
long timeyy;
long timexx;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.calculator_hourly);
wage = findViewById(R.id.hourlyrate);
t1 = findViewById(R.id.starttimetext);
t2 = findViewById(R.id.endtimetext);
t3 = findViewById(R.id.finaltime);
i1 = findViewById(R.id.startimage);
i2 = findViewById(R.id.endimage);
b1 = findViewById(R.id.calculatebutton);
Calendar c = Calendar.getInstance();
final int hour = c.get(Calendar.HOUR_OF_DAY);
final int mins = c.get(Calendar.MINUTE);
i1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final TimePickerDialog time = new TimePickerDialog(HourlyCalculator.this, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay1, int minute1) {
timex = hourOfDay1 + ":" + minute1;
t1.setText(timex);
Log.d("Time1", timex);
Calendar c3 = Calendar.getInstance();
c3.set(Calendar.HOUR_OF_DAY, hourOfDay1);
c3.set(Calendar.MINUTE, minute1);
timeyy = c3.getTimeInMillis();
}
},hour, mins, true);
time.show();
}
});
i2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final TimePickerDialog time2 = new TimePickerDialog(HourlyCalculator.this, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
timey = hourOfDay + ":" + minute;
t2.setText(timey);
Log.d("Time1", timey);
Calendar c2 = Calendar.getInstance();
c2.set(Calendar.HOUR_OF_DAY, hourOfDay);
c2.set(Calendar.MINUTE, minute);
timexx = c2.getTimeInMillis();
}
},hour,mins,true);
time2.show();
}
});
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
long difference = timexx - timeyy;
long minutesdifference = difference / 60000;
Log.d("Result", String.valueOf(minutesdifference))
}
});
}
}
当我试图在同一天内找出两个时间选择器之间的差异时。它产生了所需的输出,即10:55和11:55之间的差给了我60分钟。当我的时间在前几天下跌时,它给了我否定的答案。i、 e 23:52和00:00给了我-1431。java.time
使用java.time(现代java日期和时间API)进行时间工作。虽然我无法解释代码为什么不起作用,但下面的简化示例确实起作用
编辑:现在考虑到timexx
可能在第二天
LocalTime timeyy;
LocalTime timexx;
int hourOfDay1 = 23;
int minute1 = 52;
timeyy = LocalTime.of(hourOfDay1, minute1);
int hourOfDay = 0;
int minute = 0;
timexx = LocalTime.of(hourOfDay, minute);
long minutesdifference = ChronoUnit.MINUTES.between(timeyy, timexx);
if (minutesdifference < 0) { // timexx is the following day; add 1 day
minutesdifference += Duration.ofDays(1).toMinutes();
}
System.out.println("Result: " + minutesdifference + " minutes");
LocalTime timeyy;
本地时间XX;
inthourofday1=23;
分钟内1=52;
timeyy=LocalTime.of(hourOfDay1,minute1);
int hourOfDay=0;
int分钟=0;
timexx=本地时间(小时/天,分钟);
long minutesdifference=ChronoUnit.MINUTES.between(timeyy,timexx);
如果(分钟差<0){//timexx是第二天,则添加1天
分钟差+=天数的持续时间(1).toMinutes();
}
System.out.println(“结果:+minutesdifference+“minutes”);
输出为:
结果:8分钟
您可能还需要研究如何使用Duration
类。再往下有一个链接
问:java.time不需要Android API级别26吗?
time在较旧和较新的Android设备上都能很好地工作。它至少需要Java6
- 在Java8和更高版本以及更新的Android设备上(API级别26),现代API是内置的
- 在非androidjava6和7中,获取三个后端口,即现代类的后端口(三个十用于jsr310;请参见底部的链接)
- 在较旧的Android上,可以使用desugaring或Android版本的ThreeTen Backport。它叫ThreeTenABP。在后一种情况下,请确保使用子包从
导入日期和时间类org.threeten.bp
- 解释如何使用java.time
- ,其中首先描述了
java.time
- ,java.time的后端口到Java6和Java7(JSR-310为三十)
- ,Android版Three Ten Backport
- ,解释得非常透彻