M7M
M7M

Reputation: 13071

How to get current time and date in Android

How can I get the current time and date in an Android app?

Upvotes: 1302

Views: 1818804

Answers (30)

Darshan bhatt
Darshan bhatt

Reputation: 26

we can get time by Date() also

Upvotes: 0

Samiya Khan
Samiya Khan

Reputation: 369

In Kotlin, you can get current time data using Calendar.

val calendar = Calendar.getInstance()

This will give this output, Thu Apr 06 17:38:57 GMT+05:30 2023

Get current time hour, minute and second value like this.

val hour = calendar.get(Calendar.HOUR_OF_DAY)
val minute = calendar.get(Calendar.MINUTE)
val second = calendar.get(Calendar.SECOND)
val currentTime = "$hour:$minute:$second" 

Output of currentTime will be this 17:38:57.

Upvotes: 1

user658042
user658042

Reputation:

You could use:

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

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

There are plenty of constants in Calendar for everything you need.

Check the Calendar class documentation.

Upvotes: 1517

Java

Long date=System.currentTimeMillis();
SimpleDateFormat dateFormat =new SimpleDateFormat("dd / MMMM / yyyy - HH:mm", Locale.getDefault());
String dateStr = dateFormat.format(date);

Kotlin

date if milliseconds and 13 digits(hex to date)

val date=System.currentTimeMillis() //here the date comes in 13 digits
val dtlong = Date(date)
val sdfdate = SimpleDateFormat(pattern, Locale.getDefault()).format(dtlong)

Date Formatter

"dd / MMMM / yyyy - HH:mm" -> 29 / April / 2022 - 12:03 
"dd / MM / yyyy" -> 29 / 03 / 2022
"dd / MMM / yyyy" -> 29 / Mar / 2022 (shortens the month) 
"EEE, d MMM yyyy HH:mm:ss" -> Wed, 4 Jul 2022 12:08:56

Upvotes: 8

Oush
Oush

Reputation: 3358

    //currentTimeMillis is System.currentTimeMillis()

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

Upvotes: 3

Ayaz khan
Ayaz khan

Reputation: 153

Try this to get the current date and time in an easy way:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd G 'at' HH:mm:ss z");
String currentDateandTime = sdf.format(new Date());

Enter image description here

Upvotes: 5

Safal Bhatia
Safal Bhatia

Reputation: 405

You can get the current date and time using this code:

val current_data_time= SimpleDateFormat("MMMMddyyyyHHmm", Locale.getDefault())
val currentDateandTime: String = current_data_time.format(Date())

If you use MMMM: Then month name shows e.g. "March"

If you use MM: Then number shows e.g. "3"

dd for day and yyyy for year

If you want only the last two digits then yy.

If you change month and year first and last then need to change MMMM and dd and yyyy left and right, e.g., 12/3/2021 12:12 dd/MM/YYYY HH:mm

Upvotes: 1

PRANAV SINGH
PRANAV SINGH

Reputation: 1190

For a 12-hour clock with suffix "AM" or "PM":

DateFormat df = new SimpleDateFormat("KK:mm:ss a, dd/MM/yyyy", Locale.getDefault());
String currentDateAndTime = df.format(new Date());

For a 24-hour clock with suffix "AM" or "PM":

 DateFormat df = new SimpleDateFormat("HH:mm:ss a, dd/MM/yyyy", Locale.getDefault());
 String currentDateAndTime = df.format(new Date());

To remove the suffix, just remove "a" written with the time format.

Upvotes: 4

Aftab Alam
Aftab Alam

Reputation: 2049

Current time and date in Android with the format

Calendar c = Calendar.getInstance();
System.out.println("Current dateTime => " + c.getTime());
SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss a");
String formattedDate = df.format(c.getTime());
System.out.println("Format dateTime => " + formattedDate);

Output

I/System.out: Current dateTime => Wed Feb 26 02:58:17 GMT+05:30 2020
I/System.out: Format dateTime => 26-02-2020 02:58:17 AM

Upvotes: 10

Vipul Prajapati
Vipul Prajapati

Reputation: 1183

For the current date and time with format, use:

In Java

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

In Kotlin

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    val current = LocalDateTime.now()
    val formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy. HH:mm:ss")
    var myDate: String =  current.format(formatter)
    Log.d("Date", "DATE: " + myDate)
} else {
    var date = Date()
    val formatter = SimpleDateFormat("MMM dd yyyy HH:mma")
    val myDate: String = formatter.format(date)
    Log.d("Date", "DATE: " + myDate)
}

Date formatter patterns

"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

Upvotes: 22

Sheikh Hasib
Sheikh Hasib

Reputation: 7503

You can get the time & date separately from Calendar.

// You can pass time zone and Local to getInstance() as parameter

Calendar calendar = Calendar.getInstance();

int currentHour = calendar.get(Calendar.HOUR_OF_DAY);
int currentMinute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
int date = calendar.get(Calendar.DAY_OF_MONTH);
int month = calendar.get(Calendar.MONTH);
int year = calendar.get(Calendar.YEAR);

Upvotes: 3

Khemraj Sharma
Khemraj Sharma

Reputation: 59004

Kotlin

Here are various ways in to get the current date time in Kotlin.

fun main(args: Array<String>) {
    println(System.currentTimeMillis()) // Current milliseconds

    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
}

Upvotes: 2

Pradeep Sheoran
Pradeep Sheoran

Reputation: 493

Here are a few ways to get time and date:

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

Time using Calender

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

Local time and date

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

Zone wise Time

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);
    Toast.makeText(this,formattedTime , Toast.LENGTH_SHORT).show();
}

Easy way to get the current time and date

import java.util.Calendar

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

Upvotes: 2

Charlie
Charlie

Reputation: 359

Well, I had problems with some answers by the API, so I fused this code:

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

Output:

03:25 PM - 2017/10/03

Upvotes: 7

Danger
Danger

Reputation: 453

The below method will return the current date and time in a String, Use a different time zone according to your actual time zone. I've used 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);
}

Upvotes: 5

Filip Marusca
Filip Marusca

Reputation: 166

There is a ISO8601Utils utilities class in the com.google.gson.internal.bind.util package, so if you Gson in your app you can use this.

It supports milliseconds and time zones, so it's a pretty good option right out of the box.

Upvotes: 1

Vignesh KM
Vignesh KM

Reputation: 2076

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 format Patterns

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

Upvotes: 28

Basil Bourque
Basil Bourque

Reputation: 339837

tl;dr

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

…or…

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

Details

The other answers, while correct, are outdated. The old date-time classes have proven to be poorly designed, confusing, and troublesome.

java.time

Those old classes have been supplanted by the java.time framework.

These new classes are inspired by the highly successful Joda-Time project, defined by JSR 310, and extended by the ThreeTen-Extra project.

See the Oracle Tutorial.

Instant

An Instant is a moment on the timeline in UTC with resolution up to nanoseconds.

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

Time Zone

Apply a time zone (ZoneId) to get a ZonedDateTime. If you omit the time zone your JVM’s current default time zone is implicitly applied. Better to specify explicitly the desired/expected time zone.

Use proper time zone names in the format of continent/region such as America/Montreal, Europe/Brussels, or Asia/Kolkata. Never use the 3-4 letter abbreviations such as EST or IST as they are neither standardized nor unique.

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

Table of date-time types in Java, both modern and legacy

Generating Strings

You can easily generate a String as a textual representation of the date-time value. You can go with a standard format, your own custom format, or an automatically localized format.

ISO 8601

You can call the toString methods to get text formatted using the common and sensible ISO 8601 standard.

String output = instant.toString();

2016-03-23T03:09:01.613Z

Note that for ZonedDateTime, the toString method extends the ISO 8601 standard by appending the name of the time zone in square brackets. Extremely useful and important information, but not standard.

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

Custom format

Or specify your own particular formatting pattern with the DateTimeFormatter class.

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

Specify a Locale for a human language (English, French, etc.) to use in translating the name of day/month and also in defining cultural norms such as the order of year and month and date. Note that Locale has nothing to do with time zone.

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

Localizing

Better yet, let java.time do the work of localizing automatically.

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

About java.time

The java.time framework is built into Java 8 and later. These classes supplant the troublesome old legacy date-time classes such as java.util.Date, Calendar, & SimpleDateFormat.

To learn more, see the Oracle Tutorial. And search Stack Overflow for many examples and explanations. Specification is JSR 310.

The Joda-Time project, now in maintenance mode, advises migration to the java.time classes.

You may exchange java.time objects directly with your database. Use a JDBC driver compliant with JDBC 4.2 or later. No need for strings, no need for java.sql.* classes. Hibernate 5 & JPA 2.2 support java.time.

Where can the java.time classes be obtained?

Table listing which implementation of the java.time technology to use on which versions of Java and Android.

Upvotes: 107

Jan Bergstr&#246;m
Jan Bergstr&#246;m

Reputation: 776

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

To get the short date formatted String in the localised format of the unit.

I can't understand why so many answers use hardcoded date and time formats when the OS/Java supplies correct localisation of date and time. Isn't it better always to use the formats of the device than of the programmer?

It also supplies the reading of dates in localised formats:

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

Then it is up to the user setting the format to show the dates and time and not you. Regardless of languages, etc., there are different formats in different countries with the same language.

Upvotes: 2

Amitsharma
Amitsharma

Reputation: 1576

Try with the following way. All formats are given below to get the date and time formats.

    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

Second

Third

Upvotes: 65

Omar Faroque Anik
Omar Faroque Anik

Reputation: 2609

For a customized time and date format:

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

The output is in this format:

2015-06-18T10:15:56-05:00

Upvotes: 10

Kinjal
Kinjal

Reputation: 1193

Try this code. It displays the current date and time.

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

Upvotes: 3

Akshay Paliwal
Akshay Paliwal

Reputation: 3926

You should use the Calender class according to the new API. The Date class is deprecated now.

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

Upvotes: 5

Kirit
Kirit

Reputation: 851

For the current date and time, use:

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

Which outputs:

Feb 27, 2012 5:41:23 PM

Upvotes: 85

Alex Muriithi
Alex Muriithi

Reputation: 1901

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

Upvotes: 17

Sam Haque
Sam Haque

Reputation: 121

Use:

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

This will give you, for example, "12:32".

Remember to import android.text.format.Time;.

Upvotes: 12

SkateJerrySkate
SkateJerrySkate

Reputation: 381

Easy. You can dissect the time to get separate values for current time, as follows:

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

Same goes for the date, as follows:

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

Upvotes: 34

GomathiSelvakumar
GomathiSelvakumar

Reputation: 494

If you need the current 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);

If you need the current time:

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

Upvotes: 13

Ali Ziaee
Ali Ziaee

Reputation: 619

You can simply use the following code:

 DateFormat df = new SimpleDateFormat("HH:mm"); // Format time
 String time = df.format(Calendar.getInstance().getTime());

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

Upvotes: 11

Manikandan K
Manikandan K

Reputation: 921

Try to use the below code:

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

Upvotes: 4

Related Questions