У меня такая же ошибка, и я исправил ее следующим образом:
получить объект изображения по-разному зависит от UIImagePickerController allowEditing true или false
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
if isImagePickerAllowEditing {
sourceImage = info[UIImagePickerControllerEditedImage] as? UIImage
} else {
sourceImage = info[UIImagePickerControllerOriginalImage] as? UIImage
}
....
}
И, конечно, , попросите разрешение на доступ к библиотеке фотографий сначала, как указано выше.
Вы можете использовать:
import java.util.Calendar
Date currentTime = Calendar.getInstance().getTime();
В календаре есть много констант для всего, что вам нужно.
Изменить: Проверить Календарь класс документации
Попробуйте это
String mytime = (DateFormat.format("dd-MM-yyyy hh:mm:ss", new java.util.Date()).toString());
Вы должны использовать класс Calender в соответствии с новым API. Класс даты теперь устарел.
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);
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);
вы можете просто использовать следующий код:
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());
Попробуйте таким образом. Все форматы приведены ниже, чтобы получить формат даты и времени.
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);
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 [/ 7] g7].
Instant
Instant
- это момент на временной шкале в 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]
Пользовательский format
Или укажите свой собственный шаблон форматирования с классом
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 и более поздние версии , Эти классы вытесняют неприятные старые классы времени legacy , такие как
java.util.Date
,Calendar
и & amp;SimpleDateFormat
.Проект Joda-Time , теперь в режиме обслуживания , советует перейти на java.time .
Чтобы узнать больше, см. учебное пособие Oracle . И поиск Stack Overflow для многих примеров и объяснений. Спецификация JSR 310 .
Вы можете обменивать java.time объекты непосредственно с вашей базой данных. Используйте драйвер JDBC , соответствующий JDBC 4.2 или более поздней версии. Нет необходимости в строках, нет необходимости в классах
java.sql.*
.Где получить классы java.time?
- Java SE 8 , Java SE 9 , Java SE 10 и позже Встроенный. Часть стандартного Java API с интегрированной реализацией. Java 9 добавляет некоторые незначительные функции и исправления.
- Java SE 6 и Java SE 7 Большая часть функций java.time обратно переносится на Java 6 & amp; 7 в ThreeTen-Backport .
- Android Более поздние версии реализаций пакетов Android для классов java.time. Для более ранних Android (& lt; 26) проект ThreeTenABP адаптирует ThreeTen-Backport (упомянутый выше). См. Как использовать ThreeTenABP ... .
Проект ThreeTen-Extra расширяет java.time с дополнительными классами. Этот проект является доказательством возможных будущих дополнений к java.time. Здесь вы можете найти некоторые полезные классы, такие как
Interval
,YearWeek
,YearQuarter
и more .
Ну, у меня были проблемы с некоторыми ответами 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);
}
Вы можете использовать код:
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
из здесь .
java.util.Date
, java.util.Calendar
и java.text.SimpleDateFormat
, теперь являются наследием , вытесненными java.time классы, встроенные в Java 8 и более поздние версии. См. Учебное пособие от Oracle .
– Basil Bourque
23 June 2018 в 03:30
Time now = new Time();
now.setToNow();
Попробуйте это для меня тоже.
Это метод, который будет полезен для получения даты и времени:
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
s & amp; 2 Date
s ... не можете ли вы просто использовать "yyyy/MM/dd HH:mm"
как формат & amp; вызвать календарь один раз?
– AjahnCharles
23 November 2017 в 11:31
Чтобы получить текущее время, вы можете использовать System.currentTimeMillis()
, который является стандартным для Java. Затем вы можете использовать его для создания даты
Date currentDate = new Date(System.currentTimeMillis());
И, как упоминалось другими, чтобы создать время
Time currentTime = new Time();
currentTime.setToNow();
System.currentTimeMillis()
; просто new Date()
делает то же самое .
– Jonik
28 December 2013 в 00:11
Cannot resolve constructor Date()
в Android, Android SDK использует смесь Java 6 и 7.
– surfer190
16 March 2015 в 10:59
Date currentDate = new Date(System.currentTimeMillis());
верен
– mghhgm
3 March 2016 в 08:41
new Date(System.currentTimeMillis())
в порядке справа: (a) он избыточен, так как это то же самое, что и new Date()
. (b) Сложный java.util.Date
класс теперь вытесняется java.time.Instant
по сравнению с Java 8 и более поздними. Back-ported на Java 6 & amp; 7 в проекте ThreeTen-Backport i> и на более раннем Android (& lt; 26) в ThreeTenABP i>.
– Basil Bourque
23 June 2018 в 03:28
На самом деле безопаснее установить текущий часовой пояс на устройстве с помощью 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-скриптами.
попытайтесь использовать ниже код:
Date date = new Date();
SimpleDateFormat dateFormatWithZone = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",Locale.getDefault());
String currentDate = dateFormatWithZone.format(date);
Date todayDate = new Date();
todayDate.getDay();
todayDate.getHours();
todayDate.getMinutes();
todayDate.getMonth();
todayDate.getTime();
Для настраиваемого формата времени и даты:
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
Вы можете получить дату с помощью:
Time t = new Time(Time.getCurrentTimezone());
t.setToNow();
String date = t.format("%Y/%m/%d");
Это даст вам результат в приятной форме, как в этом примере: «2014/02/09».
Calendar
или GregorianCalendar
. Класс Date
устарел.
– Joseph Earl
20 March 2011 в 17:22
Time t = new Time();
будет использовать часовой пояс по умолчанию. По моему опыту, default == current.
– William T. Mallard
17 February 2014 в 01:44
Если вы хотите получить дату и время в определенном шаблоне, вы можете использовать следующее:
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss");
String currentDateandTime = sdf.format(new Date());
String currentDateandTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
– Pratik Butani
7 March 2014 в 14:02
Вы также можете использовать 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;
Легко, вы можете проанализировать время, чтобы получить отдельные значения для текущего времени, следующим образом:
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.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
начнет повторяться.
SystemClock.uptimeMillis()
для временной синхронизации. Поскольку это то, что используется большинством встроенных функций, есть сильная мотивация для его хорошего внедрения на всех устройствах. См. Обсуждение в SystemClock ... Если вы хотите соотнести это со временем дня, в onResume приложения, прочитайте оба этого, и Time / setToNow / toMillis. Помните разницу между ними.
– ToolmakerSteve
12 September 2014 в 20:08
GregorianCalendar
был вытеснен много лет назад на Java и в более позднем Android классами java.time i>, в частности ZonedDateTime
. Для более ранних версий Android см. Проекты ThreeTen-Backport i> и ThreeTenABP i>.
– Basil Bourque
2 May 2018 в 18:20
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'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
Если вам нужна текущая дата,
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 ));
Попробуйте этот код, на котором отображаются текущие дата и время
Date date = new Date(System.currentTimeMillis());
SimpleDateFormat dateFormat = new SimpleDateFormat("hh:mm aa",
Locale.ENGLISH);
String var = dateFormat.format(date));
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);
Calendar
или GregorianCalendar
. Класс Date
устарел.
– Joseph Earl
20 March 2011 в 17:22
Calendar.getInstance().getTime()
илиCalendar.getInstance().getTimeInMillis()
будет работать. – akousmata 11 May 2015 в 13:23