як конвертувати мілісекунди у формат дати в android?


Відповіді:


206

Просто спробуйте цей зразок коду: -

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

Сподіваюся, це допоможе ...


він працює на довжині понад 10 цифр, але не на 6 нижче. години мають за замовчуванням 4 .. ???
ralphgabb

5
вам слід використовувати новий SimpleDateFormat (dateFormat, Locale.US ( або ваш регіон )) замість нового SimpleDateFormat (dateFormat) , оскільки це спричиняє збій через зміну мови за замовчуванням для Android
Amir Hossein Ghasemi

2
FYI, клопітно старі класи дати і часу , такі як java.util.Date, java.util.Calendarі java.text.SimpleDateFormatтепер спадщина, витісняється java.time класів. Значна частина функцій java.time переноситься назад на Java 6 і Java 7 у проекті ThreeTen-Backport . Подальше адаптоване для попереднього Android у проекті ThreeTenABP . Див. Розділ Використання ThreeTenABP… .
Василь Бурк

@Uttam це працює, дякую !, але у мене було запитання. Чи повинні ми отримувати час і дату у такому форматі "/ Date (1224043200000) /"? Я читав, що це старий формат json в Microsoft, і його не слід використовувати в нових розробках.
Алдор

79

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

SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy"); 
String dateString = formatter.format(new Date(dateInMillis)));

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

Виклик цієї функції

convertDate("82233213123","dd/MM/yyyy hh:mm:ss");

2
Дякую Mahmood, для цього рішення потрібен рівень API 1 (мій проект знижений до API 15), тоді як для іншої відповіді потрібен рівень API 24 (бібліотека дат та / або календаря)
Стів Роджерс

а якщо ти американець?
behelit


10

спробуйте цей код, можливо, допоможе, змініть його відповідно до ваших потреб

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

8

нарешті я знайшов нормальний код, який працює для мене

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

6

tl; д-р

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

Java.time каркас вбудований в Java 8 і пізніших версій. Ці класи витісняти неприємні старі застарілі класи дати і часу , такі як java.util.Date, Calendar, і 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 API із комплексною реалізацією.
    • Java 9 додає деякі незначні функції та виправлення.
  • Java SE 6 і Java SE 7
    • Значна частина функцій java.time перенесена назад на Java 6 і 7 у ThreeTen-Backport .
  • Android

Проект ThreeTen-Extra розширює java.time додатковими класами. Цей проект є полігоном для можливих майбутніх доповнень до java.time. Ви можете знайти деякі корисні класи тут , такі як Interval, YearWeek, YearQuarter, і більш .


5

Короткий та ефективний:

DateFormat.getDateTimeInstance().format(new Date(myMillisValue))

4
public class LogicconvertmillistotimeActivity extends Activity {
    /** Called when the activity is first created. */
     EditText millisedit;
        Button   millisbutton;
        TextView  millistextview;
        long millislong;
        String millisstring;
        int millisec=0,sec=0,min=0,hour=0;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        millisedit=(EditText)findViewById(R.id.editText1);
        millisbutton=(Button)findViewById(R.id.button1);
        millistextview=(TextView)findViewById(R.id.textView1);
        millisbutton.setOnClickListener(new View.OnClickListener() {            
            @Override
            public void onClick(View v) {   
                millisbutton.setClickable(false);
                millisec=0;
                sec=0;
                min=0;
                hour=0;
                millisstring=millisedit.getText().toString().trim();
                millislong= Long.parseLong(millisstring);
                Calendar cal = Calendar.getInstance();
                SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
                if(millislong>1000){
                    sec=(int) (millislong/1000);
                    millisec=(int)millislong%1000;
                    if(sec>=60){
                        min=sec/60;
                        sec=sec%60;
                    }
                    if(min>=60){
                        hour=min/60;
                        min=min%60;
                    }
                }
                else
                {
                    millisec=(int)millislong;
                }
                cal.clear();
                cal.set(Calendar.HOUR_OF_DAY,hour);
                cal.set(Calendar.MINUTE,min);
                cal.set(Calendar.SECOND, sec);
                cal.set(Calendar.MILLISECOND,millisec);
                String DateFormat = formatter.format(cal.getTime());
//              DateFormat = "";
                millistextview.setText(DateFormat);

            }
        });
    }
}

Ми можемо це зробити, використовуючи одиницю виміру часу ... але це не працює нормально ... використовуйте це .. це допоможе вам .. це працює нормально
gaddam nagaraju

2
    public static Date getDateFromString(String date) {

    Date dt = null;
    if (date != null) {
        for (String sdf : supportedDateFormats) {
            try {
                dt = new Date(new SimpleDateFormat(sdf).parse(date).getTime());
                break;
            } catch (ParseException pe) {
                pe.printStackTrace();
            }
        }
    }
    return dt;
}

public static Calendar getCalenderFromDate(Date date){
    Calendar cal =Calendar.getInstance();
    cal.setTime(date);return cal;

}
public static Calendar getCalenderFromString(String s_date){
    Date date = getDateFromString(s_date);
    Calendar cal = getCalenderFromDate(date);
    return cal;
}

public static long getMiliSecondsFromString(String s_date){
    Date date = getDateFromString(s_date);
    Calendar cal = getCalenderFromDate(date);
    return cal.getTimeInMillis();
}

За допомогою цих методів можна перетворити дату у формат рядка, наприклад 18.08.2016 або будь-який тип у форматі рядка, у формат DateFormat, а також можна перетворити дату в мілісекунди.
Равіндра Ратур

2

Я шукав ефективний спосіб зробити це вже давно, і найкраще, що я знайшов, це:

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

Переваги:

  1. Він локалізований
  2. Був в Android з API 1
  3. Дуже просто

Недоліки:

  1. Параметри обмеженого формату. FYI: SHORT - це лише 2-значний рік.
  2. Ви щоразу спалюєте об'єкт Date. Я подивився на джерело інших варіантів, і це досить незначно порівняно з їх накладними витратами.

Ви можете кешувати об’єкт java.text.DateFormat, але це не безпечно. Це нормально, якщо ви використовуєте його в потоці інтерфейсу користувача.


1
public static String toDateStr(long milliseconds, String format)
{
    Date date = new Date(milliseconds);
    SimpleDateFormat formatter = new SimpleDateFormat(format, Locale.US);
    return formatter.format(date);
}

1

Це найпростіший спосіб використання 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))
}

(1) Будь ласка, не вчіть молодих користуватися давно застарілим і, як відомо, клопітним SimpleDateFormatзаняттям. Принаймні не як перший варіант. І не без будь-яких застережень. Сьогодні у нас набагато кращий java.timeсучасний API дати та часу Java та його DateTimeFormatter. Так, ви можете використовувати його на Android. Для старих версій Android використовуйте знезахуднення або див. Розділ Як використовувати ThreeTenABP в Android Project .
Оле В. В.

(2) Я не думаю, що ви передбачали малі регістри hh? Будь ласка, перевірте різницю між великими та малими літерами тут.
Оле В. В.

Сучасний спосіб: return Instant.ofEpochMilli(millis).atZone(ZoneId.systemDefault()).format(DateTimeFormatter.ofPattern(DATE_FORMAT, Locale.US)). Так, це довше, оскільки воно дає більше інформації про те, що відбувається, тому це перевага.
Оле В. В.

0

Використовуйте 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        // використовуйте Calender


-1

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.