我正在尝试制作一个应用,用户必须在其中输入日期,然后系统会显示在那之后已经过去了多少时间。但这给了我错误的时间。当我输入日期并按下按钮时,会显示:19/06/1989 21:39:32

这是代码:

Calendar sd = Calendar.getInstance();
TextView tv;
EditText year,month,day,hour,minute,second;
Button button2;
int y,m,d,h,min,s;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_test7);
    tv = (TextView)findViewById(R.id.textView4);
    year = (EditText)findViewById(R.id.year);
    month = (EditText)findViewById(R.id.month);
    day = (EditText)findViewById(R.id.day);
    hour = (EditText)findViewById(R.id.hour);
    minute = (EditText)findViewById(R.id.minute);
    second = (EditText)findViewById(R.id.second);
    button2 = (Button)findViewById(R.id.button2);
    button2.setOnClickListener(this);

}
public void onClick(View v) {
    y = Integer.parseInt(year.getText().toString());
    m = Integer.parseInt(month.getText().toString());
    d = Integer.parseInt(day.getText().toString());
    h = Integer.parseInt(hour.getText().toString());
    min = Integer.parseInt(minute.getText().toString());
    s = Integer.parseInt(second.getText().toString());
    sd.set(Calendar.YEAR,y);
    sd.set(Calendar.MONTH,m-1);
    sd.set(Calendar.DAY_OF_MONTH,d);
    sd.set(Calendar.HOUR_OF_DAY,h);
    sd.set(Calendar.MINUTE,min);
    sd.set(Calendar.SECOND,s);
    final Runnable refresh = new Runnable() {

        @Override
        public void run() {
            long yourmilliseconds = System.currentTimeMillis();
            long diff = yourmilliseconds - sd.getTimeInMillis();
            SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
            Date resultdate = new Date(diff);
            tv.setText("" + sdf.format(resultdate));
        }
    };


    Thread updateThread = new Thread() {
        @Override
        public void run() {
            try {
                while (!isInterrupted()) {
                    Thread.sleep(1000);
                    runOnUiThread(refresh);
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    };
    updateThread.start();
}


我的代码中的错误在哪里?

最佳答案

您的假设是错误的。您不能减去两个日期和期望日期。您的“差异”是一段时间。您必须手动将其转换为年,月,日等(或使用某些第三个库)。

07-24 19:14
查看更多