2014-02-16 8 views
1

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

я сделал следующее:

((SimpleDateFormat)DateFormat.getDateInstance(DateFormat.DEFAULT,Locale.getDefault())).format(new Date(Long.parseLong(timeInMilliseconds))); 

Который, кажется, работает, но я только получить дату с помощью этого метода.

Edit:

Для clearify, мне нужно, чтобы получить шаблон даты/времени из системы каким-то образом, чтобы дать каждому пользователю свой общий формат

Теперь я объединил свои решения с моим, и это, кажется, работает, как я ожидать.

private String getFormattedDateTimeString(Context context, String timeInMilliseconds) { 
    SimpleDateFormat dateInstance = (SimpleDateFormat) DateFormat.getDateInstance(DateFormat.DEFAULT, Locale.getDefault()); 
    SimpleDateFormat timeInstance = (SimpleDateFormat) DateFormat.getTimeInstance(DateFormat.DEFAULT, Locale.getDefault()); 
    Calendar calendar = Calendar.getInstance(); 
    calendar.setTimeInMillis(Long.parseLong(timeInMilliseconds)); 
    String date = dateInstance.format(calendar.getTime()); 
    String time = timeInstance.format(calendar.getTime()); 
    return date + " " + time; 
} 

Почему, черт возьми, я получаю downvotes для этого вопроса ???

+1

лучшее решение, спасибо! –

ответ

3

Все остальные ответы не учитывают, что строковое представление даты-времени должно быть локализовано.

Joda времени

Joda-Time 2,3 библиотека делает эту работу намного проще.

Joda-Time использует java.util.Locale, чтобы определить правильное форматирование представления строки даты. Класс DateTimeFormat предлагает возможность шаблона «стиль» как способ генерации DateTimeFormatter. Вы указываете шаблон стиля с двумя символами. Первый символ - стиль даты, а второй символ - стиль времени. Укажите символ «S» для короткого стиля, «M» для носителя, «L» для длинных и «F» для заполнения. Указание символа стиля «-» может быть опущено датой или временем.

Если вы не указали локаль или часовой пояс, будет использоваться JVM по умолчанию.

Locale

Чтобы создать java.util.Locale, вам необходимо:

Пример кода

// Simulate input. 
long millisecondsSinceEpoch = DateTime.now().getMillis(); 

// Proceed with a 'long' value in hand. 
DateTime dateTimeUtc = new DateTime(millisecondsSinceEpoch, DateTimeZone.UTC); 

DateTimeZone timeZone = DateTimeZone.forID("Asia/Riyadh"); 
DateTime dateTimeRiyadh = dateTimeUtc.withZone(timeZone); 

// 'ar' = Arabic, 'SA' = Saudi Arabia. 
java.util.Locale locale = new Locale("ar", "SA"); // (language code, country code); 
DateTimeFormatter formatter = DateTimeFormat.forStyle("FF").withLocale(locale).withZone(timeZone); 
String output = formatter.print(dateTimeUtc); 

самосвала утешать ...

System.out.println("millisecondsSinceEpoch: " + millisecondsSinceEpoch); 
System.out.println("dateTimeUtc: " + dateTimeUtc); 
System.out.println("dateTimeRiyadh: " + dateTimeRiyadh); 
System.out.println("output: " + output); 

При запуске ...

millisecondsSinceEpoch: 1392583624765 
dateTimeUtc: 2014-02-16T20:47:04.765Z 
dateTimeRiyadh: 2014-02-16T23:47:04.765+03:00 
output: 16 فبراير, 2014 AST 11:47:04 م 
+0

Спасибо, выглядит многообещающе. Я попробую, когда я буду дома –

0

Используйте этот ...

String dateFormat = "dd/MM/yyyy hh:mm:ss.SSS"; 

// Create a DateFormatter object for displaying date in specified format. 
DateFormat 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); 

String formatedDate = formatter.format(calendar.getTime()); 
1

Оставив свой код, как есть, просто изменить:
Вместо

getDateInstance 

попробовать

getDateTimeInstance 

Или, вы бы лучше использование:

SimpleDateFormat fmt = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss"); 
String datetime = fmt.format(cal.getTimeInMillis()); 
0

Попробуйте

SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");// you can rearange it as you like 

cal.setTimeInMillis(timeInMilliseconds); //convert the time in milli to a date 

String date = format.format(cal.getTime());// here you get your time formated 
0

Почему на земле вы хотите использовать календарь объект ???? Это просто пустая трата ресурсов.

// Create a DateFormatter object for displaying date in specified format. 
DateFormat myDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); 

String formatedDate = myDateFormat.format(new Date(timeInMilliseconds)); 
Смежные вопросы