如何将TimePickerDialog值传递给android中的倒计时计时器

如何将TimePickerDialog值传递给android中的倒计时计时器,android,countdowntimer,android-timepicker,Android,Countdowntimer,Android Timepicker,如何将TimePickerDialog值传递给倒计时计时器? 这是我的倒计时代码: public class MyCountDown extends CountDownTimer { public MyCountDown(long millisInFuture, long countDownInterval) { super(millisInFuture, countDownInterval); } @Override public void

如何将
TimePickerDialog
值传递给倒计时计时器? 这是我的倒计时代码:

public class MyCountDown extends CountDownTimer {

    public MyCountDown(long millisInFuture, long countDownInterval) {
        super(millisInFuture, countDownInterval);
    }

    @Override
    public void onFinish() {

    }

    @Override
    public void onTick(long millisUntilFinished) {  
        long sec = millisUntilFinished/1000;
        String t = String.format("%02d:%02d:%02d", sec / 3600,(sec % 3600) / 60, (sec % 60));
        t1.setText("Remaining time:---"+t);
    }   
} 

我的时间选择器输出是下午3:23。我怎样才能把这个时间传给倒计时呢?请帮助我,提前谢谢。

就像您在评论中描述的那样,您尝试
解析这样的日期:

String dt_time = "4/9/2016"+" "+"3:17 PM"; 
SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy hh:mm a");
String dt_time = "4/9/2016"+" "+"3:17 PM"; 
SimpleDateFormat format = new SimpleDateFormat("d/M/yyyy h:mm a");
Date date = format.parse(dt_time);
long millis = date.getTime();

MyCountDown mMyCountDown = new MyCountDown(millis,1000);
mMyCountDown.start();
使用如下的
SimpleDataFormat

String dt_time = "4/9/2016"+" "+"3:17 PM"; 
SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy hh:mm a");
String dt_time = "4/9/2016"+" "+"3:17 PM"; 
SimpleDateFormat format = new SimpleDateFormat("d/M/yyyy h:mm a");
Date date = format.parse(dt_time);
long millis = date.getTime();

MyCountDown mMyCountDown = new MyCountDown(millis,1000);
mMyCountDown.start();
所以你得到了一个例外。要解析日期
如日期字符串,您需要这个
SimpleDataFormat

"d/M/yyyy h:mm a"
或者您必须将日期字符串更改为:

"04/09/2016"+" "+"03:17 PM";
字符串中的日、月和小时使用的是单号格式,但尝试用双号格式解析它。我注意到来自
SimpleDateFormat
的API改变了描述。意思是一样的,但我认为旧的API描述更容易理解。看这里:

编辑 您的代码应该是这样的:

String dt_time = "4/9/2016"+" "+"3:17 PM"; 
SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy hh:mm a");
String dt_time = "4/9/2016"+" "+"3:17 PM"; 
SimpleDateFormat format = new SimpleDateFormat("d/M/yyyy h:mm a");
Date date = format.parse(dt_time);
long millis = date.getTime();

MyCountDown mMyCountDown = new MyCountDown(millis,1000);
mMyCountDown.start();
编辑2 所以现在另一个假设是:用户选择未来的某个时间,比如说下午5点,现在是下午4点。然后您必须获得当前时间,如:

Calendar cal = Calendar.getInstance();
long currentMillis = cal.getTimeInMillis();
在我上面的例子中,你可以从你的计时器中得到毫秒。这些都是在未来。然后需要从这些毫秒中减去当前时间:

long millisToCount = millis - currentMillis;
然后将其传递给计时器:

 MyCountDown mMyCountDown = new MyCountDown(millisToCount,1000);
 mMyCountDown.start();

然后计时器应倒计时,直到选定的时间到来。这就是你想要的吗?

就像你在评论中所描述的那样,你尝试
解析这样一个日期:

String dt_time = "4/9/2016"+" "+"3:17 PM"; 
SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy hh:mm a");
String dt_time = "4/9/2016"+" "+"3:17 PM"; 
SimpleDateFormat format = new SimpleDateFormat("d/M/yyyy h:mm a");
Date date = format.parse(dt_time);
long millis = date.getTime();

MyCountDown mMyCountDown = new MyCountDown(millis,1000);
mMyCountDown.start();
使用如下的
SimpleDataFormat

String dt_time = "4/9/2016"+" "+"3:17 PM"; 
SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy hh:mm a");
String dt_time = "4/9/2016"+" "+"3:17 PM"; 
SimpleDateFormat format = new SimpleDateFormat("d/M/yyyy h:mm a");
Date date = format.parse(dt_time);
long millis = date.getTime();

MyCountDown mMyCountDown = new MyCountDown(millis,1000);
mMyCountDown.start();
所以你得到了一个例外。要解析日期
如日期字符串,您需要这个
SimpleDataFormat

"d/M/yyyy h:mm a"
或者您必须将日期字符串更改为:

"04/09/2016"+" "+"03:17 PM";
字符串中的日、月和小时使用的是单号格式,但尝试用双号格式解析它。我注意到来自
SimpleDateFormat
的API改变了描述。意思是一样的,但我认为旧的API描述更容易理解。看这里:

编辑 您的代码应该是这样的:

String dt_time = "4/9/2016"+" "+"3:17 PM"; 
SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy hh:mm a");
String dt_time = "4/9/2016"+" "+"3:17 PM"; 
SimpleDateFormat format = new SimpleDateFormat("d/M/yyyy h:mm a");
Date date = format.parse(dt_time);
long millis = date.getTime();

MyCountDown mMyCountDown = new MyCountDown(millis,1000);
mMyCountDown.start();
编辑2 所以现在另一个假设是:用户选择未来的某个时间,比如说下午5点,现在是下午4点。然后您必须获得当前时间,如:

Calendar cal = Calendar.getInstance();
long currentMillis = cal.getTimeInMillis();
在我上面的例子中,你可以从你的计时器中得到毫秒。这些都是在未来。然后需要从这些毫秒中减去当前时间:

long millisToCount = millis - currentMillis;
然后将其传递给计时器:

 MyCountDown mMyCountDown = new MyCountDown(millisToCount,1000);
 mMyCountDown.start();

然后计时器应倒计时,直到选定的时间到来。这就是您想要的吗?

我也尝试将时间转换为毫秒,但输出不正确。请说明您是如何将其解析为毫秒的。..String dt_time=“4/9/2016”+“”+“3:17 PM”;SimpleDataFormat=新的SimpleDataFormat(“dd/MM/yyyy hh:MM a”);请尝试{Date-Date=format.parse(dt_-time);毫秒=Date.getTime();}catch(异常e){}我还尝试将时间转换为毫秒,但输出不正确。请显示您是如何将其解析为毫秒的。String dt_time=“4/9/2016”+“+”3:17 PM”;SimpleDataFormat=新的SimpleDataFormat(“dd/MM/yyyy hh:MM a”);请尝试{Date-Date=format.parse(dt_-time);millizes=Date.getTime();}捕获(异常e){}抱歉,我无法理解。您能帮助我如何实现它吗?对不起,输出不正确。请更清楚…您到底想解析什么?绳子怎么样?这只是
“3:23 PM”
还是像你的问题
“4/9/2016”+“+”+“3:17 PM”
?看,我让计时器用户从中选择时间,然后将该时间传递到倒计时计时器以创建倒计时这是我的全部任务。现在我想你明白我想做什么了。那问题是什么?我的例子说明了你必须做什么。我想你在这里必须更清楚,我不明白你的意思。只是一个假设:您是否希望从计时器选择器获得一些时间,让倒计时计时器计时?假设时间选择器是3小时40分钟,那么你想倒计时3小时40分钟吗?那么你走错了路,这与日期和下午无关。对不起,我不能理解。您能帮助我如何实现它吗?对不起,输出不正确。请更清楚…您到底想解析什么?绳子怎么样?这只是
“3:23 PM”
还是像你的问题
“4/9/2016”+“+”+“3:17 PM”
?看,我让计时器用户从中选择时间,然后将该时间传递到倒计时计时器以创建倒计时这是我的全部任务。现在我想你明白我想做什么了。那问题是什么?我的例子说明了你必须做什么。我想你在这里必须更清楚,我不明白你的意思。只是一个假设:您是否希望从计时器选择器获得一些时间,让倒计时计时器计时?假设时间选择器是3小时40分钟,那么你想倒计时3小时40分钟吗?那你就走错了路,这跟日期和下午没关系。。。。