как преобразовать миллисекунды в формат даты в Android?

У меня миллисекунды. Мне нужно преобразовать его в формат даты

пример:

23/10/2011

Как этого добиться?


person Pattabi Raman    schedule 31.10.2011    source источник


Ответы (15)


Просто попробуйте этот пример кода: -

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;


public class Test {

/**
 * Main Method
 */
public static void main(String[] args) {
    System.out.println(getDate(82233213123L, "dd/MM/yyyy hh:mm:ss.SSS"));
}


/**
 * Return date in specified format.
 * @param milliSeconds Date in milliseconds
 * @param dateFormat Date format 
 * @return String representing date in specified format
 */
public static String getDate(long milliSeconds, String dateFormat)
{
    // Create a DateFormatter object for displaying date in specified format.
    SimpleDateFormat formatter = new SimpleDateFormat(dateFormat);

    // Create a calendar object that will convert the date and time value in milliseconds to date. 
     Calendar calendar = Calendar.getInstance();
     calendar.setTimeInMillis(milliSeconds);
     return formatter.format(calendar.getTime());
}
}

Надеюсь, это поможет ...

person Uttam    schedule 31.10.2011
comment
он работает с более чем 10-значными значениями, но не с 6-ю меньшими значениями. час у дефолта 4 .. ??? - person ralphgabb; 26.06.2014
comment
вам следует использовать новый SimpleDateFormat (dateFormat, Locale.US (или ваш языковой стандарт)) вместо new SimpleDateFormat (dateFormat), потому что это вызывает сбой из-за изменения языка Android по умолчанию - person Amir Hossein Ghasemi; 26.07.2014
comment
К вашему сведению, неприятные старые классы даты и времени, такие как java.util.Date, java.util.Calendar и java.text.SimpleDateFormat, теперь унаследованы, их заменили java.time классы. Большая часть функций java.time перенесена на Java 6 и Java 7 в ThreeTen-Backport. Дальнейшая адаптация для более ранних версий Android в ThreeTenABP проект. См. Как использовать ThreeTenABP…. - person Basil Bourque; 20.03.2018
comment
@Uttam, это работает, спасибо !, но у меня возник вопрос. Должны ли мы получать время и дату в этом формате / Date (1224043200000) /? Я читал, что это старый json-формат Microsoft, и его не следует использовать в новых разработках. - person Aldor; 04.07.2020

Преобразуйте значение миллисекунды в экземпляр Date и передайте его выбранному модулю форматирования.

SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy"); 
String dateString = formatter.format(new Date(dateInMillis)));
person Prince John Wesley    schedule 31.10.2011

public static String convertDate(String dateInMilliseconds,String dateFormat) {
    return DateFormat.format(dateFormat, Long.parseLong(dateInMilliseconds)).toString();
}

Вызовите эту функцию

convertDate("82233213123","dd/MM/yyyy hh:mm:ss");
person Atif Mahmood    schedule 09.12.2012
comment
Спасибо Махмуд, для этого решения требуется уровень API 1 (мой проект понижен до API 15), в то время как для другого ответа требуется уровень API 24 (библиотека даты и / или календаря) - person Steve Rogers; 05.02.2017
comment
что, если ты американец? - person behelit; 18.10.2017
comment
@SteveRogers, это обеспечит обратную совместимость developer.android.com/studio/write / - person Mihae Kheel; 12.04.2021

попробуйте, этот код может помочь, измените его в соответствии с вашими потребностями

SimpleDateFormat format = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy");
Date d = format.parse(fileDate);
person ingsaurabh    schedule 31.10.2011

tl;dr

Instant.ofEpochMilli( myMillisSinceEpoch )           // Convert count-of-milliseconds-since-epoch into a date-time in UTC (`Instant`).
    .atZone( ZoneId.of( "Africa/Tunis" ) )           // Adjust into the wall-clock time used by the people of a particular region (a time zone). Produces a `ZonedDateTime` object.
    .toLocalDate()                                   // Extract the date-only value (a `LocalDate` object) from the `ZonedDateTime` object, without time-of-day and without time zone.
    .format(                                         // Generate a string to textually represent the date value.
        DateTimeFormatter.ofPattern( "dd/MM/uuuu" )  // Specify a formatting pattern. Tip: Consider using `DateTimeFormatter.ofLocalized…` instead to soft-code the formatting pattern.
    )                                                // Returns a `String` object.
    

java.time

В современном подходе используются классы java.time, которые заменяют утомительные старые устаревшие классы даты и времени, используемые во всех других ответах.

Предположим, у вас есть long количество миллисекунд с момента начала отсчета эпохи первого момента 1970 года по UTC, 1970-01-01T00: 00: 00Z…

Instant instant = Instant.ofEpochMilli( myMillisSinceEpoch ) ;

Для получения даты требуется часовой пояс. В любой момент дата меняется в зависимости от зоны земного шара.

ZoneId z = ZoneId.of( "Pacific/Auckland" ) ;
ZonedDateTime zdt = instant.atZone( z ) ;  // Same moment, different wall-clock time.

Извлеките значение только для даты.

LocalDate ld = zdt.toLocalDate() ;

Создайте строку, представляющую это значение, в стандартном формате ISO 8601.

String output = ld.toString() ;

Создайте строку в настраиваемом формате.

DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) ;
String output = ld.format( f ) ;

Совет: подумайте о том, чтобы позволить java.time автоматически локализовать для вас, а не жестко кодировать шаблон форматирования. Используйте DateTimeFormatter.ofLocalized… методы.


О java.time

< em> java.time встроен в Java 8 и новее. Эти классы заменяют неудобные старые устаревшие классы даты и времени, такие как _ 9_, _ 10_, & _ 11_.

Чтобы узнать больше, см. Учебник Oracle . И поищите в Stack Overflow множество примеров и объяснений. Спецификация - JSR 310.

Проект Joda-Time теперь в режим обслуживания, советует перейти на java.time.

Вы можете обмениваться объектами java.time непосредственно с вашей базой данных. Используйте драйвер JDBC, совместимый с JDBC 4.2 или новее. Нет необходимости в строках, нет необходимости в java.sql.* классах. Hibernate 5 и JPA 2.2 поддерживают java.time.

Где взять классы java.time?

person Basil Bourque    schedule 20.03.2018

я наконец нашел нормальный код, который мне подходит

Long longDate = Long.valueOf(date);

Calendar cal = Calendar.getInstance();
int offset = cal.getTimeZone().getOffset(cal.getTimeInMillis());
Date da = new Date(); 
da = new Date(longDate-(long)offset);
cal.setTime(da);

String time =cal.getTime().toLocaleString(); 
//this is full string        

time = DateFormat.getTimeInstance(DateFormat.MEDIUM).format(da);
//this is only time

time = DateFormat.getDateInstance(DateFormat.MEDIUM).format(da);
//this is only date
person John    schedule 08.02.2012

Коротко и эффективно:

DateFormat.getDateTimeInstance().format(new Date(myMillisValue))
person Alecs    schedule 12.02.2015

Я давно искал эффективный способ сделать это, и лучшее, что я нашел, это:

DateFormat.getDateInstance(DateFormat.SHORT).format(new Date(millis));

Преимущества:

  1. Это локализовано
  2. Был в Android с API 1
  3. Очень простой

Недостатки:

  1. Ограниченные возможности формата. К вашему сведению: SHORT - это год, состоящий только из двух цифр.
  2. Вы сжигаете объект Date каждый раз. Я просмотрел исходники для других вариантов, и это довольно незначительно по сравнению с их накладными расходами.

Вы можете кэшировать объект java.text.DateFormat, но он не является потокобезопасным. Это нормально, если вы используете его в потоке пользовательского интерфейса.

person Dustin    schedule 20.08.2019

Покрытие формата эпохи в SimpleDateFormat в Android (Java / Kotlin)

ввод: 1613316655000

вывод: 2021-02-14T15: 30: 55.726Z

В Java

long milliseconds = 1613316655000L;
Date date = new Date(milliseconds);
String mobileDateTime = Utils.getFormatTimeWithTZ(date);

// метод, который возвращает SimpleDateFormat в строке

public static String getFormatTimeWithTZ(Date currentTime) {
    SimpleDateFormat timeZoneDate = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.getDefault());
    return timeZoneString = timeZoneDate.format(currentTime);
}

В Котлине

var milliseconds = 1613316655000L
var date = Date(milliseconds)
var mobileDateTime = Utils.getFormatTimeWithTZ(date)

// метод, который возвращает SimpleDateFormat в String

fun getFormatTimeWithTZ(currentTime:Date):String {
  val timeZoneDate = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.getDefault())
  return timeZoneString = timeZoneDate.format(currentTime)
}
person Faakhir    schedule 17.02.2021
comment
В качестве отступления подумайте о том, чтобы выбросить давно устаревшие и заведомо неприятные SimpleDateFormat и друзей. Посмотрите, можете ли вы использовать удаление сахара или добавить ThreeTenABP в свой проект Android, чтобы использовать java.time, современный API даты и времени Java. С ним намного приятнее работать. - person Ole V.V.; 17.02.2021

Это самый простой способ использования Kotlin

private const val DATE_FORMAT = "dd/MM/yy hh:mm"

fun millisToDate(millis: Long) : String {
    return SimpleDateFormat(DATE_FORMAT, Locale.US).format(Date(millis))
}
person Kenny Orellana    schedule 25.07.2020
comment
(1) Пожалуйста, не учите молодых пользоваться давно устаревшим и заведомо неприятным SimpleDateFormat классом. По крайней мере, не как первый вариант. И не без оговорок. Сегодня у нас намного лучше java.time, современный API даты и времени Java, и его DateTimeFormatter. Да, вы можете использовать его на Android. Для более старых версий Android используйте удаление сахара или см. Как использовать ThreeTenABP в Android Project . - person Ole V.V.; 26.07.2020
comment
(2) Я не думаю, что вы имели в виду нижний регистр hh? Пожалуйста, проверьте разницу между верхним и нижним регистрами здесь. - person Ole V.V.; 26.07.2020
comment
Современный способ: return Instant.ofEpochMilli(millis).atZone(ZoneId.systemDefault()).format(DateTimeFormatter.ofPattern(DATE_FORMAT, Locale.US)). Да, он длиннее, потому что дает больше информации о том, что происходит, поэтому это преимущество. - person Ole V.V.; 26.07.2020
comment
@ OleV.V. Для вызова требуется уровень API 26 - person Rupam Das; 05.10.2020
comment
@RupamDas Используйте удаление сахара или добавьте ThreeTenABP в свой проект Android, чтобы использовать java.time, современный API даты и времени Java, в более старых версиях Android (на уровне API 26). - person Ole V.V.; 05.10.2020

Используйте SimpleDateFormat для Android N и выше. Используйте календарь для более ранних версий, например:

if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        fileName = new SimpleDateFormat("yyyy-MM-dd-hh:mm:ss").format(new Date());
        Log.i("fileName before",fileName);
    }else{
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.MONTH,1);
        String zamanl =""+cal.get(Calendar.YEAR)+"-"+cal.get(Calendar.MONTH)+"-"+cal.get(Calendar.DAY_OF_MONTH)+"-"+cal.get(Calendar.HOUR_OF_DAY)+":"+cal.get(Calendar.MINUTE)+":"+cal.get(Calendar.SECOND);

        fileName= zamanl;
        Log.i("fileName after",fileName);
    }

Вывод:
fileName до: 2019-04-12-07: 14: 47 // использовать SimpleDateFormat
fileName после: 2019-4-12-7 : 13: 12 // используем календарь

person Community    schedule 12.04.2019

fun convertLongToTimeWithLocale(){
    val dateAsMilliSecond: Long = 1602709200000
    val date = Date(dateAsMilliSecond)
    val language = "en"
    val formattedDateAsDigitMonth = SimpleDateFormat("dd/MM/yyyy", Locale(language))
    val formattedDateAsShortMonth = SimpleDateFormat("dd MMM yyyy", Locale(language))
    val formattedDateAsLongMonth = SimpleDateFormat("dd MMMM yyyy", Locale(language))
    Log.d("month as digit", formattedDateAsDigitMonth.format(date))
    Log.d("month as short", formattedDateAsShortMonth.format(date))
    Log.d("month as long", formattedDateAsLongMonth.format(date))
}

выход:

month as digit: 15/10/2020
month as short: 15 Oct 2020 
month as long : 15 October 2020

Вы можете изменить значение, определенное как «язык», по своему усмотрению. Вот коды всех языков: Java языковые коды

person Atakan Akar    schedule 22.10.2020
comment
Подумайте о том, чтобы выбросить давно устаревшие и заведомо неприятные SimpleDateFormat и друзей. Посмотрите, можете ли вы использовать удаление сахара или добавить ThreeTenABP в свой проект Android, чтобы использовать java.time, современный API даты и времени Java. С ним намного приятнее работать. - person Ole V.V.; 23.10.2020

Вы можете создать java.util.Date за миллисекунды. А затем преобразовал его в строку с помощью java.text.DateFormat.

person Vbif    schedule 31.10.2011

person    schedule
comment
Мы можем сделать это с помощью Time Unit .. но это не работает нормально ... используйте это .. это поможет вам .. он отлично работает - person gaddam nagaraju; 01.11.2012

person    schedule
comment
Используйте этот метод для преобразования даты в строковом формате, таком как 2016-08-18, или любого типа в строковом формате в DateFormat, а также вы можете преобразовать дату в миллисекунды. - person Ravindra Rathour; 18.08.2016