获取Android上的当前时间和日期

Get current time and date on Android

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


您可以使用:

1
2
3
import java.util.Calendar

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

日历中有很多常量,可以满足您的需要。

编辑:检查日历类文档


你可以使用android.text.format.Time(但不应该再使用了——见下面!)

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

从以上连结的参考资料:

The Time class is a faster replacement
for the java.util.Calendar and
java.util.GregorianCalendar classes.
An instance of the Time class
represents a moment in time, specified
with second precision.

注1:我写这个答案已经好几年了,它是关于一个旧的,android专用的,现在被废弃的类。谷歌是这么说的"他的班级有很多问题,建议改用GregorianCalendar"。

注意2:即使Time类有一个toMillis(ignoreDaylightSavings)方法,这也只是为了方便传递给预期时间(以毫秒为单位)的方法。时间值精确到一秒;毫秒部分总是000。如果在一个循环中

1
2
3
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将开始重复。


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

1
2
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss");
String currentDateandTime = sdf.format(new Date());


对于那些可能更喜欢定制格式的用户,您可以使用:

1
2
DateFormat df = new SimpleDateFormat("EEE, d MMM yyyy, HH:mm");
String date = df.format(Calendar.getInstance().getTime());

然而,你可以有日期格式模式,如:

1
2
3
4
5
6
7
8
"yyyy.MM.dd G 'at' HH:mm:ss z" ---- 2001.07.04 AD at 12:08:56 PDT
"hh 'o''clock' a, zzzz" ----------- 12 o'clock PM, Pacific Daylight Time
"EEE, d MMM yyyy HH:mm:ss Z"------- Wed, 4 Jul 2001 12:08:56 -0700
"yyyy-MM-dd'T'HH:mm:ss.SSSZ"------- 2001-07-04T12:08:56.235-0700
"yyMMddHHmmssZ"-------------------- 010704120856-0700
"K:mm a, z" ----------------------- 0:08 PM, PDT
"h:mm a" -------------------------- 12:08 PM
"EEE, MMM d, ''yy" ---------------- Wed, Jul 4, '01


实际上,使用Time.getCurrentTimezone()在设备上设置当前时区更安全,否则您将获得UTC中的当前时间。

1
2
Time today = new Time(Time.getCurrentTimezone());
today.setToNow();

然后,你可以得到所有你想要的日期字段,例如:

1
2
3
4
textViewDay.setText(today.monthDay +"");             // Day of the month (1-31)
textViewMonth.setText(today.month +"");              // Month (0-11)
textViewYear.setText(today.year +"");                // Year
textViewTime.setText(today.format("%k:%M:%S"));  // Current time

看到android.text.format。上课时间为所有细节。

更新

正如许多人指出的,谷歌说这个类有很多问题,不应该再使用:

This class has a number of issues and it is recommended that
GregorianCalendar is used instead.

Known issues:

For historical reasons when performing time calculations all
arithmetic currently takes place using 32-bit integers. This limits
the reliable time range representable from 1902 until 2037.See the
wikipedia article on the Year 2038 problem for details. Do not rely on
this behavior; it may change in the future. Calling
switchTimezone(String) on a date that cannot exist, such as a wall
time that was skipped due to a DST transition, will result in a date
in 1969 (i.e. -1, or 1 second before 1st Jan 1970 UTC). Much of the
formatting / parsing assumes ASCII text and is therefore not suitable
for use with non-ASCII scripts.


对于当前日期和时间,请使用:

1
String mydate = java.text.DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime());

输出:

1
Feb 27, 2012 5:41:23 PM


用这种方法尝试下面给出的所有格式来获得日期和时间格式。

1
2
3
4
    Calendar c = Calendar.getInstance();
    SimpleDateFormat dateformat = new SimpleDateFormat("dd-MMM-yyyy hh:mm:ss aa");
    String datetime = dateformat.format(c.getTime());
    System.out.println(datetime);

first

secondthird


要获得当前时间,可以使用System.currentTimeMillis(),这在Java中是标准的。然后你可以用它来创建一个日期

1
Date currentDate = new Date(System.currentTimeMillis());

和别人提到的创造时间一样

1
2
Time currentTime = new Time();
currentTime.setToNow();


你可以使用以下代码:

1
2
3
Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String strDate = sdf.format(c.getTime());

输出:

1
2014-11-11 00:47:55

您还可以从这里获得更多的SimpleDateFormat格式化选项。


很简单,你可以解剖时间,得到当前时间的单独值,如下:

1
2
3
4
5
6
7
8
9
Calendar cal = Calendar.getInstance();

  int millisecond = cal.get(Calendar.MILLISECOND);
  int second = cal.get(Calendar.SECOND);
  int minute = cal.get(Calendar.MINUTE);
        //12 hour format
  int hour = cal.get(Calendar.HOUR);
        //24 hour format
  int hourofday = cal.get(Calendar.HOUR_OF_DAY);

日期也是如此,如下:

1
2
3
4
5
6
Calendar cal = Calendar.getInstance();

  int dayofyear = cal.get(Calendar.DAY_OF_YEAR);
  int year = cal.get(Calendar.YEAR);
  int dayofweek = cal.get(Calendar.DAY_OF_WEEK);
  int dayofmonth = cal.get(Calendar.DAY_OF_MONTH);


博士

tl;

1
Instant.now()  // Current moment in UTC.

…或…

1
ZonedDateTime.now( ZoneId.of("America/Montreal" ) )  // In a particular time zone

详细信息

其他的答案虽然正确,但已经过时了。事实证明,旧的日期时间类设计得很糟糕,令人困惑,而且很麻烦。

java.time

那些旧类已经被java所取代。时间框架。

Java 8及以后版本:Java。时间框架是内置的。Java 7,6:使用java.time的backport。Android:使用这个包装版本的backport。

这些新类的灵感来自非常成功的Joda-Time项目,由JSR 310定义,并由额外的三个项目扩展。

参见Oracle教程。

Instant

Instant是UTC中时间轴上的一个时刻,分辨率高达纳秒。

1
 Instant instant = Instant.now(); // Current moment in UTC.

时区

应用一个时区(ZoneId)来获得一个ZonedDateTime。如果省略了时区,JVM的当前默认时区将隐式应用。最好显式地指定所需/预期时区。

使用continent/region格式的时区名,如America/MontrealEurope/BrusselsAsia/Kolkata。不要使用3-4个字母的缩写,如ESTIST,因为它们既不标准也不独特。

1
2
ZoneId zoneId = ZoneId.of("America/Montreal" ); // Or"Asia/Kolkata","Europe/Paris", and so on.
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );

生成字符串

您可以很容易地生成一个String作为日期-时间值的文本表示。您可以使用标准格式、自定义格式或自动本地化格式。

ISO 8601

您可以调用toString方法来使用通用且合理的ISO 8601标准格式化文本。

1
String output = instant.toString();

2016-03-23T03:09:01.613Z

注意,对于ZonedDateTimetoString方法通过在方括号中添加时区名扩展了ISO 8601标准。非常有用和重要的信息,但不标准。

2016-03-22T20:09:01.613-08:00[America/Los_Angeles]

自定义格式

或者使用DateTimeFormatter类指定您自己的特定格式化模式。

1
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy hh:mm a" );

指定一种人类语言(英语、法语等)的Locale用于翻译日期/月份的名称,以及定义文化规范,如年份、月份和日期的顺序。注意Locale与时区无关。

1
2
formatter = formatter.withLocale( Locale.US ); // Or Locale.CANADA_FRENCH or such.
String output = zdt.format( formatter );

< /本地化hh3 >

更好的是,让java来做。时间会自动进行本地化。

1
2
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.MEDIUM );
String output = zdt.format( formatter.withLocale( Locale.US ) );  // Or Locale.CANADA_FRENCH and so on.

关于java.time

java。time框架构建到Java 8及更高版本中。这些类替代了麻烦的旧遗留日期时间类,如java.util.DateCalendar和&SimpleDateFormat

Joda-Time项目现在处于维护模式,建议迁移到java。时间类。

要了解更多信息,请参阅Oracle教程。并搜索堆栈溢出的许多例子和解释。规格为JSR 310。

您可以交换java。直接使用数据库中的时间对象。使用兼容JDBC 4.2或更高版本的JDBC驱动程序。不需要字符串,不需要java.sql.*类。

从何处获取java。时间类?

Java SE 8, Java SE 9, Java SE 10,等等内置的。标准Java API的一部分,带有绑定的实现。Java 9添加了一些较小的特性和修复。Java SE 6和Java SE 7java的大部分。时间功能是向后移植到Java 6 &在ThreeTen-Backport 7。安卓java的Android bundle实现的后续版本。时间类。对于早期的Android (<26), ThreeTenABP项目采用了ThreeTen-Backport(如上所述)。查看如何使用ThreeTenABP…

这个额外的项目扩展了java。额外的课程时间。这个项目是将来可能添加到java.time的一个试验场。您可以在这里找到一些有用的类,比如IntervalYearWeekYearQuarter等等。


由于Android主要是Java,所以有几个选项,但是如果你想在textView中编写它,下面的代码就可以了:

1
2
3
4
String currentDateTimeString = DateFormat.getDateInstance().format(new Date());

// textView is the TextView view that should display it
textView.setText(currentDateTimeString);


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
SimpleDateFormat databaseDateTimeFormate = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
SimpleDateFormat databaseDateFormate = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat sdf1 = new SimpleDateFormat("dd.MM.yy");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy.MM.dd G 'at' hh:mm:ss z");
SimpleDateFormat sdf3 = new SimpleDateFormat("EEE, MMM d, ''yy");
SimpleDateFormat sdf4 = new SimpleDateFormat("h:mm a");
SimpleDateFormat sdf5 = new SimpleDateFormat("h:mm");
SimpleDateFormat sdf6 = new SimpleDateFormat("H:mm:ss:SSS");
SimpleDateFormat sdf7 = new SimpleDateFormat("K:mm a,z");
SimpleDateFormat sdf8 = new SimpleDateFormat("yyyy.MMMMM.dd GGG hh:mm aaa");


String currentDateandTime = databaseDateTimeFormate.format(new Date());     //2009-06-30 08:29:36
String currentDateandTime = databaseDateFormate.format(new Date());     //2009-06-30
String currentDateandTime = sdf1.format(new Date());     //30.06.09
String currentDateandTime = sdf2.format(new Date());     //2009.06.30 AD at 08:29:36 PDT
String currentDateandTime = sdf3.format(new Date());     //Tue, Jun 30, '09
String currentDateandTime = sdf4.format(new Date());     //8:29 PM
String currentDateandTime = sdf5.format(new Date());     //8:29
String currentDateandTime = sdf6.format(new Date());     //8:28:36:249
String currentDateandTime = sdf7.format(new Date());     //8:29 AM,PDT
String currentDateandTime = sdf8.format(new Date());     //2009.June.30 AD 08:29 AM

日期格式模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
G   Era designator (before christ, after christ)
y   Year (e.g. 12 or 2012). Use either yy or yyyy.
M   Month in year. Number of M's determine length of format (e.g. MM, MMM or MMMMM)
d   Day in month. Number of d's determine length of format (e.g. d or dd)
h   Hour of day, 1-12 (AM / PM) (normally hh)
H   Hour of day, 0-23 (normally HH)
m   Minute in hour, 0-59 (normally mm)
s   Second in minute, 0-59 (normally ss)
S   Millisecond in second, 0-999 (normally SSS)
E   Day in week (e.g Monday, Tuesday etc.)
D   Day in year (1-366)
F   Day of week in month (e.g. 1st Thursday of December)
w   Week in year (1-53)
W   Week in month (0-5)
a   AM / PM marker
k   Hour in day (1-24, unlike HH's 0-23)
K   Hour in day, AM / PM (0-11)
z   Time Zone


1
2
3
4
5
6
final Calendar c = Calendar.getInstance();
    int mYear = c.get(Calendar.YEAR);
    int mMonth = c.get(Calendar.MONTH);
    int mDay = c.get(Calendar.DAY_OF_MONTH);

textView.setText(""+mDay+"-"+mMonth+"-"+mYear);


这是一个获取日期和时间的有用方法:

1
2
3
4
5
6
7
private String getDate(){
    DateFormat dfDate = new SimpleDateFormat("yyyy/MM/dd");
    String date=dfDate.format(Calendar.getInstance().getTime());
    DateFormat dfTime = new SimpleDateFormat("HH:mm");
    String time = dfTime.format(Calendar.getInstance().getTime());
    return date +"" + time;
}

你可以调用这个方法,得到当前的日期和时间值:

1
2017/01//09 19:23


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    Calendar cal = Calendar.getInstance();
    System.out.println("time =>" + dateFormat.format(cal.getTime()));

    String time_str = dateFormat.format(cal.getTime());

    String[] s = time_str.split("");

    for (int i = 0; i < s.length; i++) {
         System.out.println("date  =>" + s[i]);
    }

    int year_sys = Integer.parseInt(s[0].split("/")[0]);
    int month_sys = Integer.parseInt(s[0].split("/")[1]);
    int day_sys = Integer.parseInt(s[0].split("/")[2]);

    int hour_sys = Integer.parseInt(s[1].split(":")[0]);
    int min_sys = Integer.parseInt(s[1].split(":")[1]);

    System.out.println("year_sys  =>" + year_sys);
    System.out.println("month_sys  =>" + month_sys);
    System.out.println("day_sys  =>" + day_sys);

    System.out.println("hour_sys  =>" + hour_sys);
    System.out.println("min_sys  =>" + min_sys);

1
2
3
Time time = new Time();
time.setToNow();
System.out.println("time:" + time.hour+":"+time.minute);

比如12:32。

记得导入android。text。format。time;


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


如果你需要当前日期,

1
2
3
4
5
Calendar cc = Calendar.getInstance();
int year=cc.get(Calendar.YEAR);
int month=cc.get(Calendar.MONTH);
int mDay = cc.get(Calendar.DAY_OF_MONTH);
System.out.println("Date", year+":"+month+":"+mDay);

如果你需要当前时间,

1
2
3
 int mHour = cc.get(Calendar.HOUR_OF_DAY);
 int mMinute = cc.get(Calendar.MINUTE);
 System.out.println("time_format"+String.format("%02d:%02d", mHour , mMinute ));


定制时间和日期格式:

1
2
    SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZZZZZ",Locale.ENGLISH);
    String cDateTime=dateFormat.format(new Date());

输出格式如下:2015 - 06 - 18 - t10:15:56凌晨


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

试试这个对我也有用。


你可使用以下方法取得日期:

1
2
3
Time t = new Time(Time.getCurrentTimezone());
t.setToNow();
String date = t.format("%Y/%m/%d");

这将给你一个很好的形式的结果,例如:"2014/02/09"。


1
2
3
4
5
6
Date todayDate = new Date();
todayDate.getDay();
todayDate.getHours();
todayDate.getMinutes();
todayDate.getMonth();
todayDate.getTime();

你可以简单地使用以下代码:

1
2
3
4
5
 DateFormat df = new SimpleDateFormat("HH:mm"); //format time
 String time = df.format(Calendar.getInstance().getTime());

 DateFormat df1=new SimpleDateFormat("yyyy/MM/dd");//foramt date
 String date=df1.format(Calendar.getInstance().getTime());


我有一些问题的答案的API,所以我融合了这段代码,我希望它为他们的人:

1
2
3
4
5
6
7
8
9
10
11
    Time t = new Time(Time.getCurrentTimezone());
    t.setToNow();
    String date1 = t.format("%Y/%m/%d");

    Date date = new Date(System.currentTimeMillis());
    SimpleDateFormat dateFormat = new SimpleDateFormat("hh:mm aa",
            Locale.ENGLISH);
    String var = dateFormat.format(date);
    String horafecha = var+" -" + date1;

    tvTime.setText(horafecha);

输出:下午03:25 - 2017/10/03


您应该根据新的API使用日历类。现在不推荐使用Date类。

1
2
3
4
5
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);

试试这个

1
String mytime = (DateFormat.format("dd-MM-yyyy hh:mm:ss", new java.util.Date()).toString());

下面的方法将以字符串形式返回当前日期和时间,根据实际时区使用不同的时区。我使用格林尼治时间

1
2
3
4
5
6
public static String GetToday(){
    Date presentTime_Date = Calendar.getInstance().getTime();
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
    return dateFormat.format(presentTime_Date);
}

试试这段代码,它显示当前日期和时间

1
2
3
4
 Date date = new Date(System.currentTimeMillis());
 SimpleDateFormat dateFormat = new SimpleDateFormat("hh:mm aa",
                         Locale.ENGLISH);
 String var = dateFormat.format(date));

尝试使用以下代码:

1
2
3
 Date date = new Date();
 SimpleDateFormat dateFormatWithZone = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",Locale.getDefault());  
 String currentDate = dateFormatWithZone.format(date);

这里有一些获取时间和日期的方法

1
2
3
4
5
6
7
public static void getCurrentTimeUsingDate() {
    Date date = new Date();
    String strDateFormat ="hh:mm:ss a";
    DateFormat dateFormat = new SimpleDateFormat(strDateFormat);
    String formattedDate= dateFormat.format(date);      
    Toast.makeText(this, formattedDate, Toast.LENGTH_SHORT).show();
}

时间使用压延机

1
2
3
4
5
6
7
public static void getCurrentTimeUsingCalendar() {
        Calendar cal = Calendar.getInstance();
        Date date=cal.getTime();
        DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
        String formattedDate=dateFormat.format(date);
        Toast.makeText(this, formattedDate, Toast.LENGTH_SHORT).show();
}

本地时间及日期

1
2
3
4
5
public static void getCurrentTime(){
     System.out.println("-----Current time of your time zone-----");
     LocalTime time = LocalTime.now();
    Toast.makeText(this, time, Toast.LENGTH_SHORT).show();
 }

区明智的时间

1
2
3
4
5
6
7
public static void getCurrentTimeWithTimeZone(){
Toast.makeText(this,"Current time of a different time zone using LocalTime", Toast.LENGTH_SHORT).show();

    ZoneId zoneId = ZoneId.of("America/Los_Angeles");
    LocalTime localTime=LocalTime.now(zoneId);
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");
    String formattedTime=localTime.format(formatter);

吐司。makeText (formattedTime, Toast.LENGTH_SHORT),告诉();

1
}

获取当前时间和日期的简单方法

1
2
3
import java.util.Calendar

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

芬兰湾的科特林

以下是在kotlin中获取当前日期时间的各种方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
fun main(args: Array<String>) {
    println(System.currentTimeMillis()) // current millisecond

    val date = Calendar.getInstance().time // current date object
    val date1 = Date(System.currentTimeMillis())

    println(date.toString())
    println(date1.toString())

    val now = Time(System.currentTimeMillis()) // current time object
    println(now.toString())

    val sdf = SimpleDateFormat("yyyy:MM:dd h:mm a", Locale.getDefault())
    println(sdf.format(Date())) // format current date

    println(DateFormat.getDateTimeInstance().format(System.currentTimeMillis())) // using getDateTimeInstance()

    println(LocalDateTime.now().toString()) // java 8

    println(ZonedDateTime.now().toString()) // java 8
}

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

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

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

此外,该网站亦提供以本地格式阅读日期的服务:

1
2
3
4
5
6
7
    DateFormat format = DateFormat.getDateInstance(DateFormat.SHORT);
    Date date=null;
    try {
        date = format.parse(DateString);
    }
    catch(ParseException e) {
    }

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


com。google。GSON。internal。bind。util包中有一个ISO8601Utils utils类,所以如果你在你的应用程序中使用GSON,你可以使用这个。

它支持millis和时区,所以这是一个很好的选择开箱即用。


1
2
3
4
5
6
7
8
9
10
11
    long totalSeconds = currentTimeMillis / 1000;
    int currentSecond = (int)totalSeconds % 60;

    long totalMinutes = totalSeconds / 60;
    int currentMinute = (int)totalMinutes % 60;

    long totalHours = totalMinutes / 60;
    int currentHour = (int)totalHours % 12;

    TextView tvTime = findViewById(R.id.tvTime);
    tvTime.setText((currentHour + OR - TIME YOU ARE FROM GMT) +":" + currentMinute +":" + currentSecond);