【问题标题】:Find difference between current time and time that user inputs查找用户输入的当前日期和时间之间的差异
【发布时间】:2015-09-21 20:16:31
【问题描述】:

我正在尝试制作一个应用程序,用户必须在其中输入日期,系统会显示在那之后经过了多少时间。但它给了我错误的时间。当我输入日期并按下按钮时,它会显示: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();
}

我的代码哪里出错了?

【问题讨论】:

  • 如果您想向用户显示自输入日期以来经过了多少时间,为什么要显示格式化日期?
  • 查看这个答案stackoverflow.com/a/25355659/2350083,了解如何格式化两个日期之间的差异。

标签: java android time


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-06
    • 2011-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多