Ответ 1
Вы можете использовать:
import java.util.Calendar
Date currentTime = Calendar.getInstance().getTime();
В календаре есть много констант для всего, что вам нужно.
Редактировать:
Проверка документации класса календаря
Как получить текущее время и дату в приложении для Android?
Вы можете использовать:
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 сейчас говорит, что "[t] у его класса есть ряд проблем, и рекомендуется вместо 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.
Если вы хотите получить дату и время по определенному шаблону, вы можете использовать следующее:
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault());
String currentDateandTime = sdf.format(new Date());
Или
Дата:
String currentDate = new SimpleDateFormat("dd-MM-yyyy", Locale.getDefault()).format(new Date());
Время:
String currentTime = new SimpleDateFormat("HH:mm:ss", Locale.getDefault()).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();
Затем вы можете получить все поля даты, которые вы хотите, например:
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 говорит, что у этого класса есть ряд проблем и больше не предполагается использовать:
В этом классе есть ряд проблем, и рекомендуется, чтобы Вместо этого используется GregorianCalendar.
Известные проблемы:
По историческим причинам при выполнении расчетов времени все арифметика в настоящее время выполняется с использованием 32-битных целых чисел. Эти ограничения надежный временной диапазон, представленный с 1902 года по 2037 год. статья в Википедии о проблеме 2038 года для деталей. Не полагайтесь на это поведение; он может измениться в будущем. призвание switchTimezone (String) на дату, которая не может существовать, например, стена время, которое было пропущено из-за перехода на летнее время, приведет к дате в 1969 году (то есть -1, или 1 секунда до 1 января 1970 года по UTC). Большая часть форматирование/синтаксический анализ предполагает текст ASCII и поэтому не подходит для использования с не-ASCII-скриптами.
Для текущей даты и времени используйте:
String mydate = java.text.DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime());
Какие выходы:
Feb 27, 2012 5:41:23 PM
Попробуйте таким образом. Все форматы приведены ниже, чтобы получить формат даты и времени.
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);
В настоящее время вы можете использовать System.currentTimeMillis(), который является стандартным для Java. Затем вы можете использовать его для создания даты
Date currentDate = new Date(System.currentTimeMillis());
И как упоминалось другими, чтобы создать время
Time currentTime = new Time();
currentTime.setToNow();
Вы можете использовать код:
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 из здесь.
Instant.now() // Current moment in UTC.
... или...
ZonedDateTime.now( ZoneId.of( "America/Montreal" ) ) // In a particular time zone
Другие ответы, хотя и правильные, устарели. Старые классы даты и времени оказались плохо продуманными, запутанными и хлопотными.
Эти старые классы были заменены структурой java.time.
Эти новые классы вдохновлены очень успешным проектом Joda-Time, определенным JSR 310 и расширенным проектом ThreeTen-Extra.
Смотрите Учебное пособие по Oracle.
InstantInstant - это момент времени на UTC с разрешением до наносекунд.
Instant instant = Instant.now(); // Current moment in UTC.
Примените часовой пояс (ZoneId), чтобы получить ZonedDateTime. Если вы опустите часовой пояс, то текущий часовой пояс по умолчанию для JVM будет применен неявно. Лучше явно указать желаемый/ожидаемый часовой пояс.
Используйте правильные имена часовых поясов в формате continent/region, например America/Montreal, Europe/Brussels или Asia/Kolkata, Никогда не используйте 3-4-буквенные сокращения, такие как EST или IST, поскольку они не являются ни стандартизированными, ни уникальными.
ZoneId zoneId = ZoneId.of( "America/Montreal" ); // Or "Asia/Kolkata", "Europe/Paris", and so on.
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
Вы можете легко сгенерировать String как текстовое представление значения даты и времени. Вы можете использовать стандартный формат, собственный формат или автоматически локализованный формат.
Вы можете вызывать методы toString для форматирования текста, используя общий и разумный стандарт ISO 8601.
String output = instant.toString();
2016-03-23T03:09:01.613Z
Обратите внимание, что для ZonedDateTime метод toString расширяет стандарт ISO 8601, добавляя название часового пояса в квадратных скобках. Чрезвычайно полезная и важная информация, но не стандартная.
2016-03-22T20:09:01.613-08:00[America/Los_Angeles]
Или укажите собственный шаблон форматирования с помощью класса 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 8 и более поздние версии. Эти классы вытесняют проблемные старые устаревшие классы даты и времени, такие как java.util.Date, Calendar и & SimpleDateFormat.
Проект Joda-Time, который теперь находится в режиме обслуживания, рекомендует выполнить переход на классы java.time.
Чтобы узнать больше, см. Учебное пособие по Oracle. И поищите в Кару множество примеров и объяснений. Спецификация: JSR 310.
Вы можете обмениваться объектами java.time напрямую с вашей базой данных. Используйте драйвер JDBC, совместимый с JDBC 4.2 или более поздней версией. Нет необходимости в строках, нет необходимости в классах java.sql.*.
Где взять классы java.time?
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Здесь вы можете найти несколько полезных классов, таких как Interval, YearWeek, YearQuarter и еще.
Легко, вы можете проанализировать время, чтобы получить отдельные значения для текущего времени, следующим образом:
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);
Есть несколько вариантов, поскольку Android - это в основном Java, но если вы хотите записать его в textView, следующий код выполнит трюк:
String currentDateTimeString = DateFormat.getDateInstance().format(new Date());
// textView is the TextView view that should display it
textView.setText(currentDateTimeString);
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
Форматы формата даты
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 determine length of format (e.g. MM, MMM or MMMMM)
d Day in month. Number of d 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 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);
Это метод, который будет полезен для получения даты и времени:
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
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);
Вы также можете использовать android.os.SystemClock. Например, SystemClock.elapsedRealtime() даст вам более точные показания времени, когда телефон спит.
Для настроенного формата времени и даты:
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
Если вам нужна текущая дата,
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 ));
Time now = new Time();
now.setToNow();
Попробуйте это для меня тоже.
Date todayDate = new Date();
todayDate.getDay();
todayDate.getHours();
todayDate.getMinutes();
todayDate.getMonth();
todayDate.getTime();
Вы можете получить дату, используя:
Time t = new Time(Time.getCurrentTimezone());
t.setToNow();
String date = t.format("%Y/%m/%d");
Это даст вам результат в хорошей форме, как в этом примере: "2014/02/09".
Для текущей даты и времени в формате используйте
На 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)
В Котлине
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 Formater
"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
вы можете просто использовать следующий код:
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, поэтому я скомплектовываю этот код, надеюсь, он будет обслуживать их ребята:
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
Ниже метод вернет текущую дату и время в 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);
}
Вы должны использовать класс Calender в соответствии с новым API. Класс 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 = new Date(System.currentTimeMillis());
SimpleDateFormat dateFormat = new SimpleDateFormat("hh:mm aa",
Locale.ENGLISH);
String var = dateFormat.format(date));