Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何获取时间选择器和系统时间之间的时间差_Android - Fatal编程技术网

Android 如何获取时间选择器和系统时间之间的时间差

Android 如何获取时间选择器和系统时间之间的时间差,android,Android,我想做一个小闹钟应用程序。我想计算系统时间(当前)和时间选择器时间(由用户选择)之间的时间差。我找不到好的解决办法。这是我的密码 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_alarm_list); timePicker = (TimePicker) fi

我想做一个小闹钟应用程序。我想计算系统时间(当前)和时间选择器时间(由用户选择)之间的时间差。我找不到好的解决办法。这是我的密码

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_alarm_list);
    timePicker = (TimePicker) findViewById(R.id.timePicker1);
    timePicker.setIs24HourView(true);
    b = (Button) findViewById(R.id.button1);
    c = Calendar.getInstance();
    timePicker.setOnTimeChangedListener(new OnTimeChangedListener() {





    @Override
    public void onTimeChanged(TimePicker arg0, int hours, int minutes) {
        c.set(Calendar.HOUR_OF_DAY, hours);
        c.set(Calendar.MINUTE, minutes);

        chosenTimeMills = c.getTimeInMillis();
    }
});


b.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View arg0) {
                          Date currentDate = new Date(System.currentTimeMillis());
                c.set(Calendar.HOUR_OF_DAY,currentDate.getHours());
                c.set(Calendar.MINUTE, currentDate.getMinutes());
                systemTimeMills = c.getTimeInMillis();

                long difference  =systemTimeMills-chosenTimeMills;
                Date date = new Date(difference);
                Log.d("TAGG", "Difference is: "+date.getHours()+" Hours and "+date.getMinutes()+" minutes");



    }
});
}

我很想得到一个答案。谢谢,乌斯曼

那么,系统时间是以毫秒为单位的。把你选择的时间换算成毫秒,然后取一个差

试试这个

Calendar c2 = Calendar.getInstance();
c2.set(Calendar.HOUR_OF_DAY, 22);
c2.set(Calendar.MINUTE, 30);
long sub = c2.getTimeInMillis() - c.getTimeInMillis();
这里的
c
是您创建的
日历
实例,
c2
将为当前
日期时间
创建一个实例


编辑

onClick
中,您可以尝试

Calendar cal = Calendar.getInstance();
long diff = c.getTimeInMillis() - cal.getTimeInMillis();
long diffInSec = TimeUnit.MILLISECONDS.toSeconds(diff);
int hour = (int) (diffInSec / (60 * 60));
int minremaining = (int) (diffInSec % (60 * 60));
int min = (int) (minremaining / (60));
int secondsRemaining = (int) (minremaining % (60));
Log.e("TAG", "Difference in    milliss   calendar      " + diff);
Log.e("TAG", "hour      " + hour);
Log.e("TAG", "min       " + min);
Log.e("TAG", "sec       " + secondsRemaining);
其中
c
Calendar
实例,其值在
onTimeChanged


变量
hour
min
secondsRemaining
将为您提供剩余的时间。

您的主要问题是,当您使用
计时器时,您只能访问小时和分钟。
我猜你想要的是时差,currentSystemTime和TodayTime+小时和分钟

例如: 如果用户在10:00(当前时间)选择20:35,则应获得10:35。对吗

下面是我的解决方案(完整示例:):


我的系统时间是12小时格式,选择的时间是24小时,这会不会给我带来麻烦?不会,都是像123456789这样的数字。它是以毫秒为单位的总时间。
@Override
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
    pickedHour = hourOfDay;
    pickedMinute = minute;
}

public void onClickListenerOfYourBUtton(View view)
{
    long currentTime = System.currentTimeMillis();
    long diffTime = 0;

    calendar = Calendar.getInstance();
    sysCurrent.setText(currentTime +"");

    calendar.setTimeInMillis(currentTime);//set to currentTime to know the current day
    calendar.set(Calendar.HOUR_OF_DAY, pickedHour); 
    calendar.set(Calendar.MINUTE, pickedMinute);

    diffTime = calendar.getTimeInMillis()- currentTime; // Here, i get the difference in hours, minutes, ...for the same day



    difference.setText(String.format("%02d:%02d",
            diffTime/hoursInMilis, 
            (diffTime%hoursInMilis)/minutesInMilis)); //Formating string




}