Как я могу получить путь к файлу из этого типа URI контента?
blockquote>У вас нет, так как нет никакого файла вообще за
Uri
, не говоря уже о том, к которому вы можете получить доступ. ЭтоUri
может указывать на:
- Локальный файл на внешнем хранилище
- Локальный файл на внутренней памяти для другого приложения
- Локальный файл на съемном носителе
- Локальный файл, который зашифрован и должен быть дешифрован на лету
- Поток байтов, хранящихся в столбце
BLOB
в базе данных- Часть содержимого, которое должно быть загружено другим приложением первым
- ... и т. д.
Все другие приложения, такие как Facebook, Google+ это делает
blockquote>Нет, это не так. Они используют
ContentResolver
и:
openInputStream()
для чтения в байтах, связанных с содержимымgetType()
, чтобы получить тип MIME, связанный с содержимымquery()
иOpenableColumns
, чтобы получить размер и отображаемое имя, связанные с контентом
Используйте метод ниже
String givenDateString = "Tue Apr 23 16:08:28 GMT+05:30 2013";
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy");
try {
Date mDate = sdf.parse(givenDateString);
long timeInMilliseconds = mDate.getTime();
System.out.println("Date in milli :: " + timeInMilliseconds);
} catch (ParseException e) {
e.printStackTrace();
}
Подробнее о строках даты и времени .
попробуй это ...
Calendar calendar = Calendar.getInstance();
calendar.set(datePicker.getYear(), datePicker.getMonth(), datePicker.getDayOfMonth(),
timePicker.getCurrentHour(), timePicker.getCurrentMinute(), 0);
long startTime = calendar.getTimeInMillis();
Преобразование строки даты и времени в миллисекунды:
public static final String DATE_TIME_FORMAT = "MM/dd/yyyy HH:mm:ss a";
или
public static final String DATE_TIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ss";
или
public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ssZZZZZ";
//TimeZone.getAvailableIds() to list all timezone ids
String timeZone = "EST5EDT";//it can be anything timezone like IST, GMT.
String time = "2/21/2018 7:41:00 AM";
public static long[] convertTimeInMillis(String dateTimeFormat, String timeZone, String... times) throws ParseException {
SimpleDateFormat dateFormat = new SimpleDateFormat(dateTimeFormat, Locale.getDefault());
dateFormat.setTimeZone(TimeZone.getTimeZone(timeZone));
long[] ret = new long[times.length];
for (int i = 0; i < times.length; i++) {
String timeWithTZ = times[i] + " "+timeZone;
Date d = dateFormat.parse(timeWithTZ);
ret[i] = d.getTime();
}
return ret;
}
// миллисекунд до dateString
public static String convertTimeInMillisToDateString(long timeInMillis, String DATE_TIME_FORMAT) {
Date d = new Date(timeInMillis);
SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
return sdf.format(d);
}
Вы можете использовать этот код
long miliSecsDate = milliseconds ("2015-06-04");
Log.d("miliSecsDate", " = "+miliSecsDate);
public long milliseconds(String date)
{
//String date_ = date;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try
{
Date mDate = sdf.parse(date);
long timeInMilliseconds = mDate.getTime();
System.out.println("Date in milli :: " + timeInMilliseconds);
return timeInMilliseconds;
}
catch (ParseException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return 0;
}
В Котлине
Просто используйте
timeInMilSeconds = date.time
, где timeInMilSeconds
- миллисекунды (var timeInMilSeconds: Long
), а date
- Дата
Date beginupd = new Date(cursor1.getLong(1));
Эта переменная beginupd содержит формат
Wed Oct 12 11:55:03 GMT+05:30 2011
long millisecond = beginupd.getTime();
Date.getTime() JavaDoc states:
Возвращает количество миллисекунд с 1 января 1970 года, 00:00:00 по Гринвичу, представленное этим объектом Date.
Просто для дополнения данных ответов, если вам нужно преобразовать время, указанное в дате, в другие единицы времени, вы можете использовать TimeUnit API
Пример:
TimeUnit.MILLISECONDS.toMinutes(millis)
Попробуйте это в Kotlin,
val calendar = Calendar.getInstance()
val UniqueID = calendar.timeInMillis
тот же код на Java,
Calendar calendar = Calendar.getInstance(); long time = calendar.getTimeInMillis();
Android 26 и выше
Conversation from epoch to UTC date time and Device date time
public class TimeConversionUtil {
public static long getCurrentEpochUTC() {
return Instant.now(Clock.systemUTC()).toEpochMilli();
}
public static String deviceDateTimeString(long epochMilliUtc) {
Instant instant = Instant.ofEpochMilli(epochMilliUtc);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM dd, yyyy, hh:mm:ss a", Locale.US).withZone(ZoneId.systemDefault());
return formatter.format(instant);
}
public static String uTCDateTimeString(long epochMilliUtc) {
Instant instant = Instant.ofEpochMilli(epochMilliUtc);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM dd, yyyy, hh:mm:ss a", Locale.US).withZone(ZoneId.of("UTC"));
return formatter.format(instant);
}
public static long convertDateStringToLongUTC(String stringUTCDate) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM dd, yyyy, hh:mm:ss a", Locale.ENGLISH);
LocalDateTime localDate = LocalDateTime.parse(stringUTCDate, formatter);
long timeInMilliseconds = localDate.atOffset(ZoneOffset.UTC).toInstant().toEpochMilli();
return timeInMilliseconds;
}
}
@Test
public void timeConversionTest() {
long currentTimeUtc = Instant.now(Clock.systemUTC()).toEpochMilli();
String utc = TimeConversionUtil.uTCDateTimeString(currentTimeUtc);
Long utcLongTime = TimeConversionUtil.convertDateStringToLongUTC(utc);
String utc1 = TimeConversionUtil.uTCDateTimeString(utcLongTime);
assertTrue(utc.equalsIgnoreCase(utc1));
}