有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java计算经过的时间?

我想知道如何实现这样的目标:

在活动B中,用户将键入内容并按下按钮返回到活动A。在活动A中,它将显示几秒钟前的。如果状态为一小时前,则将显示一小时前

如何实现


共 (2) 个答案

  1. # 1 楼答案

    你可以这样做

     long startTime
     long duration
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        startTime = SystemClock.uptimeMillis();
    } 
    
    
    
    
     @Override
    public void onBackPressed() {
        duartion = SystemClock.uptimeMillis() - startTime;
        //Duration you get in MS
        once you are done call 
        super.onBackPressed();//finish the activity
    
    } 
    
  2. # 2 楼答案

    下面是一个不使用java的工作代码。时间LocalDateTime 如果您想使用它,可以进行必要的更改

    您可以使用共享首选项在活动A中节省时间。

    节省时间:

    SharedPreferences preferences = null;
    preferences = act.getSharedPreferences("your_name", Activity.MODE_PRIVATE);
    preferences.edit().putString("TIME", getCurrentTimeDate())
    .commit();
    

    用这个来获得时间:

    private String getCurrentTimeDate() {
    
        Calendar calendar = new GregorianCalendar();
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    
        return formatter.format(calendar.getTime());
    }
    

    现在有两种解决方案可以继续:

    1. 将计时器设置为服务,它将在后台继续运行并不断更新时间

    2. 从SharedReferences检索数据,并在每次需要显示值时计算差异

    根据要显示此数据的次数选择该选项

    计算活动B中的差异:

        Calendar calendar = new GregorianCalendar();
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    
        SharedPreferences shared = getSharedPreferences("your_name", MODE_PRIVATE);
        String saved_time = (shared.getString("TIME", ""));
    
        Date date = null,date2 = null;
        try {
            date = formatter.parse(saved_time);
        } catch (ParseException e) {
            e.printStackTrace();
        }
    
    
        String currentTime = getCurrentTimeDate();
        try {
            date2 = formatter.parse(currentTime);
        } catch (ParseException e) {
            e.printStackTrace();
        }
    
        printDifference(date,date2);
    

    方法:在此活动中也使用相同的getCurrentTimeDate

    public void printDifference(Date startDate, Date endDate){
    
        //milliseconds
        long different = endDate.getTime() - startDate.getTime();
    
        System.out.println("startDate : " + startDate);
        System.out.println("endDate : "+ endDate);
        System.out.println("different : " + different);
    
        long secondsInMilli = 1000;
        long minutesInMilli = secondsInMilli * 60;
        long hoursInMilli = minutesInMilli * 60;
        long daysInMilli = hoursInMilli * 24;
    
        //long elapsedDays = different / daysInMilli;
        //different = different % daysInMilli;
    
        long elapsedHours = different / hoursInMilli;
        different = different % hoursInMilli;
    
        long elapsedMinutes = different / minutesInMilli;
        different = different % minutesInMilli;
    
        long elapsedSeconds = different / secondsInMilli;
    
        System.out.printf(
                "%d hours, %d minutes, %d seconds%n",
                elapsedHours, elapsedMinutes, elapsedSeconds);
    
    }