获取Android上的当前时间和date

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

你可以使用:

import java.util.Calendar Date currentTime = Calendar.getInstance().getTime(); 

日历中有许多常量用于您所需的一切。 编辑: 日历类文档

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

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

从上面的链接可以看出:

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


注1:我写了这个答案已经有好几年了,是关于一个旧的,Android的,现在被弃用的类。 Google现在说 :“他的class级有很多问题,build议使用GregorianCalendar ”。


注2:尽pipeTime类有一个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将开始重复。

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

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

对于那些更喜欢自定义格式的用户,可以使用:

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

而您可以有DateFormat模式,如:

 "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中的当前时间。

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

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

 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.Time类。

UPDATE

正如很多人所指出的那样,Google说这个class级有很多问题,不应该再被使用:

这个类有很多问题,build议使用GregorianCalendar。

已知的问题:

由于执行时间计算的历史原因,目前所有的算术都是使用32位整数进行的。 这限制了从1902年到2037年的可靠时间范围。有关详细信息,请参阅维基百科有关2038年问题的文章。 不要依赖这种行为; 它可能会在未来发生变化。 在不能存在的date上调用switchTimezone(String)(如由于DST转换而跳过的挂墙时间)将导致1969年的date(即-1,即UTC时间1970年1月1日之前的1秒)。 大部分格式化/parsing都采用ASCII文本,因此不适用于非ASCII脚本。

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

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

哪些产出:

 Feb 27, 2012 5:41:23 PM 

要获取当前时间,可以使用Java中标准的System.currentTimeMillis() 。 然后你可以用它来创build一个date

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

正如别人提到要创造一个时间

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

试试这种方式所有格式都在下面给出,以获取date和时间格式。

  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); 

第一

第二 第三

您可以使用代码:

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

输出:

 2014-11-11 00:47:55 

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

很简单,您可以分解时间来获取当前时间的单独值,如下所示:

 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); 

同样的date,如下所示:

 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); 

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

 String currentDateTimeString = DateFormat.getDateInstance().format(new Date()); // textView is the TextView view that should display it textView.setText(currentDateTimeString); 

TL;博士

 Instant.now() // Current moment in UTC. ZonedDateTime.now( ZoneId.of( "America/Montreal" ) ) // In a particular time zone 

细节

其他答案虽然正确,但已经过时。 旧的date – 时间课程已被certificate是devise不佳,混乱,麻烦。

java.time

那些旧的类已经被java.time框架所取代。

  • Java 8及更高版本: java.time框架是内置的。
  • Java 7&6:使用java.time的backport 。
  • Android:使用这个backport的这个包装版本 。

这些新课程的灵感来自JSR 310定义的非常成功的Joda-Time项目,并由ThreeTen-Extra项目扩展。

请参阅Oracle教程 。

Instant

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

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

时区

应用时区( ZoneId )来获取ZonedDateTime 。 如果您省略时区,则隐式应用JVM当前的默认时区。 最好明确指定所需的/预期的时区。

使用America/MontrealEurope/BrusselsAsia/Kolkatacontinent/region格式的适当时区名称 。 不要使用3-4字母缩写,如ESTIST因为它们既不标准也不唯一。

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

生成string

您可以轻松生成一个String作为date时间值的文本表示。 您可以使用标准格式,自定义格式或自动本地化格式。

ISO 8601

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

 String output = instant.toString(); 

2016-03-23T03:09:01.613Z

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

2016-03-22T20:09:01.613-08:00 [美国/洛杉矶]

自定义格式

或者用DateTimeFormatter类指定你自己特定的格式模式。

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

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

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

本地化

更好的是让java.time自动完成本地化的工作。

 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及更高版本中。 这些类取代了麻烦的旧的遗留date时间类,如java.util.Date.Calendarjava.text.SimpleDateFormat

Joda-Time项目现在处于维护模式 ,build议迁移到java.time。

要了解更多信息,请参阅Oracle教程 。 并search堆栈溢出了很多例子和解释。 规范是JSR 310 。

从何处获取java.time类?

  • Java SE 8SE 9及更高版本
    • 内置。
    • 带有捆绑实现的标准Java API的一部分。
    • Java 9增加了一些小function和修复。
  • Java SE 6SE 7
    • 大部分的java.timefunction都被移植到了ThreeTen-Backport中的 Java 6&7中。
  • Android的
    • ThreeTenABP项目专门针对Android,采用了ThreeTen-Backport (上文提到)。
    • 请参阅如何使用…。

ThreeTen-Extra项目将java.time扩展到其他类。 这个项目是未来可能增加java.time的一个试验场。 你可能会在这里find一些有用的类,比如IntervalYearWeekYearQuarter 等等 。

 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 

date格式模式

 G Era designator (before christ, after christ) y Year (eg 12 or 2012). Use either yy or yyyy. M Month in year. Number of M's determine length of format (eg MM, MMM or MMMMM) d Day in month. Number of d's determine length of format (eg 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 (eg Monday, Tuesday etc.) D Day in year (1-366) F Day of week in month (eg 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 
 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); 

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

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

这会给你,例如,12:32。

记得要导入android.text.format.Time;

  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); 

您可以使用以下方式获取date:

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

这会给你一个很好的结果,例如:“2014/02/09”。

对于定制的时间和date格式:

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

输出如下格式:2015-06-18T10:15:56-05:00

 Date todayDate = new Date(); todayDate.getDay(); todayDate.getHours(); todayDate.getMinutes(); todayDate.getMonth(); todayDate.getTime(); 
 Time now = new Time(); now.setToNow(); 

试试这个作品也适合我。

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

 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; } 

您可以调用此方法并获取当前的date和时间值:

 2017/01//09 19:23 

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

  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()); 

如果您需要当前date,

 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); 

如果你需要现在的时间,

  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 )); 

您应该根据新的API使用Calender类。 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); 

尝试这个

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

试试这个代码显示当前的date和时间

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

下面的方法将返回当前的date和时间在string中,根据您的实际时区使用不同的时区。我使用了GMT

 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); } 

那么我有问题的一些API的答案,所以我融合了这个代码,我希望它为他们提供服务:

  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 PM – 2017/10/03

尝试使用下面的代码:

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