首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Calendar.get问题(Calendar.HOUR)

Calendar.get问题(Calendar.HOUR)
EN

Stack Overflow用户
提问于 2011-08-08 09:07:44
回答 4查看 27.9K关注 0票数 6

我正在尝试在TextView中显示我的应用程序上次更新的时间(例如,“上次更新时间12:13”)。我正在尝试使用Calendar实例,我认为我正确理解了它,但似乎遇到了问题。我知道要获得一个实例,我会使用Calendar.getInstance()方法。然后为了得到小时和分钟,我使用了Calendar.get(Calendar.HOUR)和Calendar.get(Calendar.MINUTE)。我的分钟字段返回正确,但Calendar.HOUR返回的是24小时制的小时,而我想要的是12小时制。我以为HOUR_OF_DAY是24小时工作的。我哪里错了?

下面是我使用的代码:

代码语言:javascript
复制
Calendar rightNow = Calendar.getInstance();
mTv.setText("Refreshed! Last updated " + 
           rightNow.get(Calendar.HOUR) + ":" + 
           rightNow.get(Calendar.MINUTE) + ".");

mTv是我正在更新的TextView。谢谢你的帮助。

另外,如果我能说“5分钟前最后一次更新”,那将是最理想的。而不是“最后更新在12:13 12”。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-08-08 15:32:03

我建议结合使用SimpleDateFormat和Date类来格式化时间:

代码语言:javascript
复制
Date now = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("K:mm a");
String formattedTime = sdf.format(now);

简单解释一下它的工作原理:创建一个SimpleDateFormat对象并将一个字符串传递给它的构造器,该构造器告诉它如何格式化传递给它的format()函数的每个时间/日期对象。有大量代表特殊时间对象的常量/字母(例如秒、AM/PM标记、..完整列表请参见class documentation )。

"K:mm a“表示"11:42 AM”格式-以12小时格式表示小时的一个或两个数字(取决于其值),始终是两个数字表示分钟(mm)和AM或PM (a),具体取决于时间。

这样做之后,只需将一个Date对象传递给format()函数,您就会得到一个格式化的字符串。请注意,日期只包含一个时间点,如果您从不带参数的构造函数创建它("= new Date()"),它将使用当前时间。如果你需要另一个时间,你可以用millis传递一个长参数,你可以从Calendar.getTimeInMillis()得到。

在实现“更新XY分钟前的函数”时-是的,你必须每分钟更新一次,并且你必须计算更新和当前时间之间的差异。我会说,从电池和额外工作的角度来看,这是不值得的。如果你的应用程序使用标准的短更新周期(例如每小时或其他时间),并且不是全屏的,那么用户在屏幕的顶部/底部有一个可见的时钟。如果他真的想检查自更新以来有多长时间了,他可以看一眼并比较一下(主要是几分钟或几小时/分钟)。我想这对用户来说不会有什么不便,至少对我来说不会。我只是比较而不去想这一点。但我倾向于杀掉那些浪费我电池的应用程序。

还要注意,并不是每个人都使用12小时格式。要根据用户设置/国家/地区获取本地化的时间格式,请使用DateFormat.getTimeInstance()。这将返回一个格式,但它的工作方式与SimpleDateFormat类似,只需传递一段时间给DateFormat ()即可。

票数 8
EN

Stack Overflow用户

发布于 2016-03-03 02:36:41

将Calendar.HOUR_OF_DAY用于24小时时钟

代码语言:javascript
复制
Calendar rightNow = Calendar.getInstance();
mTv.setText("Refreshed! Last updated " + 
rightNow.get(Calendar.HOUR_OF_DAY) + ":" + 
rightNow.get(Calendar.MINUTE) + ".");
票数 5
EN

Stack Overflow用户

发布于 2011-08-08 15:08:24

您可以使用如下线程在每分钟更新一次editText

代码语言:javascript
复制
Thread t = new Thread(){
public void run() {     
    Calendar oldTime = Calendar.getInstance();
    oldMinute =  oldTime .get(Calendar.MINUTE);
    while(true) {
            Calendar rightNow= Calendar.getInstance();          
        newMinute = rightNow.get(Calendar.MINUTE);
        if(newMinute != oldMinute) {

            oldMinute = newMinute;

            mTv.setText("Refreshed! Last updated " + 
                       rightNow.get(Calendar.HOUR) + ":" + 
                       rightNow.get(Calendar.MINUTE) + ".");
        }
    }
}
t.start();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6976922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档