【问题标题】:subtract two time strings减去两个时间字符串
【发布时间】:2016-03-08 18:07:35
【问题描述】:

我有两个称为clockedin 和clockedout 的字符串变量。我将它们放在共享首选项中,现在我尝试调用它们并将它们转换为整数,这样我就可以从时钟输入小时数中减去时钟输出小时数,以查看工作了多少小时。

    public void onCheckedChanged(CompoundButton compoundButton, boolean b){
    if(b){
        Calendar c = Calendar.getInstance();
        System.out.println(c.getTime());
        SimpleDateFormat df = new SimpleDateFormat("hh:mm a");
        String formattedDate = df.format(c.getTime());
        TextView clockedin = (TextView)findViewById(R.id.clockedin);
        clockedin.setText(formattedDate);






        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putBoolean("toggleButton", tb.isChecked());
        editor.commit();

        SharedPreferences sharedPreferences2=getSharedPreferences("MyData", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor1= sharedPreferences2.edit();
        editor1.putString("clockedin", formattedDate);
        editor1.commit();
    }
    else {
        Calendar c = Calendar.getInstance();
        System.out.println(c.getTime());
        SimpleDateFormat df = new SimpleDateFormat("hh:mm a");
        String formattedDate = df.format(c.getTime());
        TextView clockedout = (TextView)findViewById(R.id.clockedout);
        clockedout.setText(formattedDate);

        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putBoolean("toggleButton", false);
        editor.commit();

        SharedPreferences sharedPreferences2=getSharedPreferences("MyData2", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor1= sharedPreferences2.edit();
        editor1.putString("clockedout", clockedout.getText().toString());
        editor1.commit();

        SharedPreferences sharedPreferences1 = getSharedPreferences("MyData", Context.MODE_PRIVATE);
        String clockedin =sharedPreferences1.getString("clockedin", DEFAULT);


}}

我的转换方法:

    public void onClickButtonListener2(){
Button button2;
button2 = (Button) findViewById(R.id.calctotal);
button2.setOnClickListener(
        new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Date date = null;
                Date date2 = null;


                SharedPreferences sharedPreferences1 = getSharedPreferences("MyData", Context.MODE_PRIVATE);
                String clockedin =sharedPreferences1.getString("clockedin", DEFAULT);

                SharedPreferences sharedPreferences2 = getSharedPreferences("MyData2", Context.MODE_PRIVATE);
                String clockedout =sharedPreferences2.getString("clockedout",DEFAULT);

                DateFormat outFormat = new SimpleDateFormat("hh:mm");
                try {
                    date = outFormat.parse(String.valueOf(clockedout));
                    date2 = outFormat.parse(clockedin);
                }catch ( ParseException e){
                    e.printStackTrace();
                }
                if (date2.before(date)){
                    long diffMs = date.getTime() - date2.getTime();
                    long diffSec = diffMs/1000;
                    long min = diffSec/60;
                    double hour = (double)min/60;
                    double hourA = Math.round(hour *100.0)/100.0;
                    TextView totalhours=(TextView)findViewById(R.id.totalhours);
                    totalhours.setText((int) hourA);

                }

            }
        });
         }

我的日志附在enter image description here

【问题讨论】:

  • 你不是在 5 小时前问过这个吗?
  • 是的,但现在我有了日志

标签: java android string time


【解决方案1】:

totalhours.setText((int) hourA);

应该是:totalhours.setText(String.valueOf(hourA)); 或者 totalhours.setText("" + hourA);

如果你用整数调用 setText,它将寻找具有该 ID 的字符串资源。

【讨论】:

  • 谢谢。但现在我有另一个问题。由于某种原因,sharedpreferences 无法正常工作。它应该保存按下按钮的时间并存储该时间。但是,根据用户进入活动的时间而变化。
【解决方案2】:

为什么要存储格式化日期而不是 Calendar.getInstance() 中的长值?做吧

if(..){
   editor.putLong("dateIn", Calendar.getInstance().getTimeInMillis());
}
else{
   editor.putLong("dateIn", Calendar.getInstance().getTimeInMillis());
}

然后将它们减去为longs

long dateIn = sharedPreferences.getLong("dateIn", defaultValueIn);
long dateOut = sharedPreferences.getLong("dateOut", defaultValueOut);
long difference = dateOut - dateIn;
int hoursBetween = difference/(1000*60*60)

现在你只为自己节省了两页代码

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-29
    • 1970-01-01
    • 2012-10-28
    • 2013-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多