Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何计算24小时过去与否_Java_Android_Time - Fatal编程技术网

Java 如何计算24小时过去与否

Java 如何计算24小时过去与否,java,android,time,Java,Android,Time,我面临的一个问题是,我正在将当前设备时间保存在按钮单击事件后的共享首选项中。例如:2015年8月27日上午11:05。 之后,当用户参加相同的活动时,我必须根据项目要求更改接下来24小时的布局文件,直到(2015年8月28日上午11:05)。但我面临的问题是,如果点击按钮的时间已经过去了24小时,我怎么能得到这个结果呢?在这种情况下,点击按钮的时间是上午11点05分。我们将非常感谢您的任何帮助。谢谢。您通常以毫秒为单位比较时间。只需检查两次之间的差值是否大于24*60*60*1000 如果您想要

我面临的一个问题是,我正在将当前设备时间保存在按钮单击事件后的共享首选项中。例如:2015年8月27日上午11:05。
之后,当用户参加相同的活动时,我必须根据项目要求更改接下来24小时的布局文件,直到(2015年8月28日上午11:05)。但我面临的问题是,如果点击按钮的时间已经过去了24小时,我怎么能得到这个结果呢?在这种情况下,点击按钮的时间是上午11点05分。我们将非常感谢您的任何帮助。谢谢。

您通常以毫秒为单位比较时间。只需检查两次之间的差值是否大于24*60*60*1000


如果您想要更安全的比较,请使用Androids
Calendar
。它会检查时区等多项内容。

每当用户返回时,只需将当前时间与您保存在共享首选项中的时间进行比较即可。如果差异是24小时或更长时间,做任何你想做的事情


了解您尝试在哪个环境/编程语言中执行此操作也很好

您可以使用以下内容:

 new CountDownTimer(30000, 1000) {

     public void onTick(long millisUntilFinished) {
         mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
     }

     public void onFinish() {
         mTextField.setText("done!");
     }
  }.start();
-

但我认为Mamata是对的,特别是如果它将是每天都是这样的话

设置新的currentTime时,将布尔值hasDayPassed设置为false,然后将currentTime与较新的时间进行比较时,如果两者匹配,则将其设置为true

祝你好运有两种情况:

  • 第一个是不考虑时区:这里你可以用几种方法
首先,我认为:

//DateFormat is used formatting the Date with the sintax you like
DateFormat df = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
Date today = Calendar.getInstance().getTime();
//save date in SharedPreferences using
String dateString = df.format(today);
sp.putString("date", dateString);
当你必须取回它时:

DateFormat df = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
Date date;
if(preferences.contains("date")){
    String dateString = preferences.getString("date", "");
    if(dateString != ""){
        date = df.parse(dateString);
        if(new Date() >= date.addDays(1)){
            //a day is passed
        } else{
            //not passed
        }
    }else{
        //case date wrongly stored
    }
} else{
    //no date stored
}
  • 如果你必须考虑时区,在StimeZoint中添加一个表示S+D/Th的int,使用<代码> TimeStave类。 而当你把它拿回来时,你必须比较两个时区,并从新日期中加/减差值

在首选项中节省时间:

Editor editor=mSharedPreferences.edit(); //mSharedPreferences is instance of your SharedPreferences
editor.putLong("time",System.currentTimeMillis());
editor.commit();
无论何时,只要您想:

if(System.currentTimeMillis()-mSharedPreferences.getLong("time",0)<24*60*60*1000){
//with in a day
}else{
//greater than a day
}
if(System.currentTimeMillis()-mSharedPreferences.getLong(“time”,0)如果您希望“24小时后”,请使用纯UTC时间。最简单的方法是使用原始毫秒

// Save current time
long savedMillis = System.currentTimeMillis();

// Check time elapsed
if (System.currentTimeMillis() >= savedMillis + 24 * 60 * 60 * 1000) {
    // time has elapsed
}
如果你想“明天同一时间之后”,你要么记住时区,要么干脆转换成非分区文本

SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");

// Save current time
String savedTime = df.format(new Date()); // Applies local time zone 1

// Check time elapsed
Calendar cal = Calendar.getInstance();
cal.setTime(df.parse(savedTime)); // Applies local time zone 2
cal.add(Calendar.DAY_OF_MONTH, 1); // Adjusts for DST in local time zone 2
if (System.currentTimeMillis() >= cal.getTimeInMillis()) {
    // time has elapsed
}
解释

new Date()
返回UTC时间的一个瞬间。
df.format
返回当前默认时区中该瞬间的文本表示形式,即调用时JVM的有效时区(或者更确切地说,在创建SimpleDataFormat时)

稍后,
df.parse
将再次使用当前默认时区将该文本解析回UTC时间的一个瞬间,但该时区可能与调用
df.format
时使用的时区不同。
cal.setTime
日历更新为UTC时间的瞬间。
cal.add
日历更新到1天后的同一时间,根据需要调整当前默认时区的DST。

cal.getTimeInMillis()
是一天中同一时间的UTC millis,在本地时区中,在保存时间后的第1天。

只需按共享首选项保存时间,然后在您当时回来时将保存的时间与当前时间进行比较。很简单。!!答案取决于您的意思是“明天本地时间上午11:05后”还是“24小时后”?仅供参考:在我之前的评论中,“当地时间”既受夏令时的影响,也受旅行(汽车、飞机、船只、自行车等)到不同时区的影响。如果没有时区/DST问题/闰年出现,则有效。@RobAu正确,如果他刚从纽约飞往洛杉矶,情况会变得更复杂。是“当地时间明天上午11:05后”还是“24小时后”?请参阅标签:
java
android
,在这种情况下,这篇文章可能很有帮助:比较java内部的时间:纯时间解决方案将不起作用。如果存储的时间是“11:05”(没有日期),下一次运行是“10:45”,那就是明天(24小时)。类似的是“11:48”"今天晚些时候,或者晚些时候?如果需要的话,你必须先比较日期,然后比较时间。我看不出有什么问题吗?这是30秒。24小时包括很多事情,如系统重新启动、应用程序因电池电量不足而关闭等。所以理想的方法是在首选项中节省时间。这也减少了电池消耗。哦……谢谢很多@Seshu