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:即使
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 ... |
结果序列将重复相同的值,例如
如果你想以特定的模式获取日期和时间,你可以使用以下方法:
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 |
实际上,使用
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); |
要获得当前时间,可以使用
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 |
您还可以从这里获得更多的
很简单,你可以解剖时间,得到当前时间的单独值,如下:
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 | 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
1 | Instant instant = Instant.now(); // Current moment in UTC. |
时区
应用一个时区(
使用
1 2 | ZoneId zoneId = ZoneId.of("America/Montreal" ); // Or"Asia/Kolkata","Europe/Paris", and so on. ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId ); |
生成字符串
您可以很容易地生成一个
ISO 8601
您可以调用
1 | String output = instant.toString(); |
2016-03-23T03:09:01.613Z
注意,对于
2016-03-22T20:09:01.613-08:00[America/Los_Angeles]
自定义格式
或者使用
1 | DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy hh:mm a" ); |
指定一种人类语言(英语、法语等)的
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及更高版本中。这些类替代了麻烦的旧遗留日期时间类,如
Joda-Time项目现在处于维护模式,建议迁移到java。时间类。
要了解更多信息,请参阅Oracle教程。并搜索堆栈溢出的许多例子和解释。规格为JSR 310。
您可以交换java。直接使用数据库中的时间对象。使用兼容JDBC 4.2或更高版本的JDBC驱动程序。不需要字符串,不需要
从何处获取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的一个试验场。您可以在这里找到一些有用的类,比如
由于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); |