util - 獲取Android上的當前時間和日期




simpledateformat (20)

如何在Android應用程序中獲取當前時間和日期?


TL;博士

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

…要么…

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

細節

其他答案雖然正確,但已過時。 舊的日期時間課程已被證明設計不佳,令人困惑和麻煩。

java.time

那些舊的類已經被java.time框架所取代。

這些新課程的靈感來自JSR 310定義的非常成功的Joda-Time項目,並由ThreeTen-Extra項目擴展。

請參閱Oracle教程

Instant

InstantUTC時間線上的一個時刻,分辨率高達nanoseconds

 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作為日期時間值的文本表示。 您可以使用標準格式,自定義格式或自動本地化格式。

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

指定人類語言(英語, French等)的語言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及更高版本中。 這些類取代了麻煩的舊式legacy日期時間類,如java.util.Date.Calendarjava.text.SimpleDateFormat

Joda-Time項目現在處於維護模式 ,建議遷移到java.time。

要了解更多信息,請參閱Oracle教程 。 並蒐索堆棧溢出了很多例子和解釋。 規範是JSR 310

何處獲取java.time類?

  • Java SE 8SE 9及更高版本
    • 內置。
    • 帶有捆綁實現的標準Java API的一部分。
    • Java 9增加了一些次要功能和修復。
  • Java SE 6SE 7
  • Android
    • ThreeTenABP項目針對Android專門針對Android調整了ThreeTen-Backport (上文提到)。
    • 請參閱如何使用...。

ThreeTen-Extra項目將java.time擴展到其他類。 這個項目是未來可能增加java.time的一個試驗場。 您可以在這裡找到一些有用的課程,如IntervalYearWeekYearQuarter等。


試試這個代碼它顯示當前的日期和時間

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

你也可以使用android.os.SystemClock。 例如,SystemClock.elapsedRealtime()會在手機睡著時為您提供更準確的時間讀數。


你可以使用:

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的,現在被棄用的類。 谷歌現在android.text.format.Time ,“他的班級有很多問題,建議使用GregorianCalendar ”。

注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將開始重複。


嘗試使用下面的代碼:

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

如果您想以特定模式獲取日期和時間,您可以使用以下內容:

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss");
String currentDateandTime = sdf.format(new 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 ));

對於定制的時間和日期格式:

    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


對於當前日期和時間,請使用:

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

哪些輸出:

Feb 27, 2012 5:41:23 PM

很簡單,您可以分解時間以獲取當前時間的單獨值,如下所示:

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

日期也一樣,如下所示:

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

您可以使用代碼:

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

您還可以從here獲得更多用於SimpleDateFormat格式化選項。


您應該根據新的API使用Calender類。 日期類現在已被棄用。

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主要是Java,但是如果你想用textView編寫它,下面的代碼可以做到這一點:

String currentDateTimeString = DateFormat.getDateInstance().format(new Date());

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

試試這種方式所有格式都在下面給出,以獲取日期和時間格式。

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


這是一個可以獲取日期和時間的方法:

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

您可以調用此方法並獲取當前的日期和時間值:

2017/01//09 19:23

    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 todayDate = new Date();
todayDate.getDay();
todayDate.getHours();
todayDate.getMinutes();
todayDate.getMonth();
todayDate.getTime();

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

試試這個作品也適合我。


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

這會給你,例如,12:32。

記得導入android.text.format.Time;





time