如何在Android应用程序中获取当前时间和日期?


当前回答

如果你想以特定的模式获取日期和时间,你可以使用以下命令:

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault());
String currentDateandTime = sdf.format(new Date());

Or,

日期:

String currentDate = new SimpleDateFormat("dd-MM-yyyy", Locale.getDefault()).format(new Date());

时间:

String currentTime = new SimpleDateFormat("HH:mm:ss", Locale.getDefault()).format(new Date());

其他回答

您应该根据新的API使用calendar类。Date类现在已弃用。

Calendar cal = Calendar.getInstance();

String date = "" + cal.get(Calendar.DATE) + "-" + (cal.get(Calendar.MONTH)+1) + "-" + cal.get(Calendar.YEAR);

String time = "" + cal.get(Calendar.HOUR_OF_DAY) + ":" + cal.get(Calendar.MINUTE);

你可以(但不再应该-见下文!)使用android.text.format.Time:

Time now = new Time();
now.setToNow();

从上面的参考链接:

Time类是一个更快的替代品 为java.util.Calendar和 java.util.GregorianCalendar类。 Time类的实例 表示指定的时间点 精准度第二。


注1: 我写这个答案已经有好几年了, 它是关于一个旧的,android专用的,现在已被弃用的类。 谷歌现在这样说 “他的类有一些问题,建议使用公历代替”。


注2:尽管Time类有一个toMillis(ignoreDaylightSavings)方法,但这只是为了方便传递给以毫秒为单位的方法。时间值仅精确到一秒;毫秒部分总是000。如果在循环中,你会这样做

Time time = new Time();   time.setToNow();
Log.d("TIME TEST", Long.toString(time.toMillis(false)));
... do something that takes more than one millisecond, but less than one second ...

结果序列将重复相同的值,例如1410543204000,直到下一秒开始,此时1410543205000将开始重复。

String DataString = DateFormat.getDateInstance(DateFormat.SHORT).format(Calendar.getInstance().getTime());

获取单元本地化格式的短日期格式字符串。

我不明白为什么这么多答案使用硬编码的日期和时间格式,而OS/Java提供了正确的日期和时间本地化。总是使用设备的格式不是比使用程序员的格式更好吗?

它还提供了本地化格式的日期读取:

    DateFormat format = DateFormat.getDateInstance(DateFormat.SHORT);
    Date date = null;
    try {
        date = format.parse(DateString);
    }
    catch(ParseException e) {
    }

然后由用户来设置显示日期和时间的格式,而不是你。不论语言等,同一种语言在不同的国家有不同的格式。

你可以用:

import java.util.Calendar;
import java.util.Date;

Date currentTime = Calendar.getInstance().getTime();

Calendar中有许多常量可以满足您的所有需要。

检查Calendar类文档。

你也可以使用android.os.SystemClock。 例如,SystemClock.elapsedRealtime()将在手机处于睡眠状态时为您提供更准确的时间读数。