Преобразование строки Epoch time в date
Я видел этот вопрос несколько раз, и ни один из ответов, кажется, что мне нужно.
У меня есть переменная long type, в которой хранится время эпохи.
то, что я хочу сделать, это преобразовать его в строку
например, если время эпохи сохранено на сегодня, последняя строка будет читать:
17/03/2012
Как бы я к этому?
8 ответов
посмотреть в SimpleDateFormat
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
sdf.format(new Date(myTimeAsLong));
вы бы создали Date
С long
- это просто:
Date date = new Date(epochTime);
отметим, что epochTime
здесь должно быть в миллисекундах с начала эпохи - если у тебя есть секунд начиная с эпохи, умножьте на 1000.
тогда вы создадите SimpleDateFormat
указание соответствующего шаблона, культуры и часового пояса. Например:
SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy", Locale.US);
format.setTimeZone(...);
затем использовать для форматирования даты в строку:
String text = format.format(date);
Date date = new Date(String);
это не рекомендуется.
решение
Date date = new Date(1406178443 * 1000L);
DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
format.setTimeZone(TimeZone.getTimeZone("Etc/UTC"));
String formatted = format.format(date);
убедитесь, что умножить на 1000L
Joda-Time
Если под эпохальным временем вы подразумевали количество миллисекунд с первого момента 1970 года в UTC, то вот пример кода с использованием библиотеки Joda-Time...
DateTimeZone timeZone = DateTimeZone.forID( "Europe/Paris" );
DateTime dateTime = new DateTime( yourMilliseconds, timeZone );
String output = DateTimeFormat.forStyle( "S-" ).withLocale( Locale.CANADA_FRENCH ).print( dateTime );
Других Эпох
это определение эпохи распространено из-за его использования в Unix. Но имейте в виду, что по крайней мере a пару десятков эпох определения используются различными компьютерными системами.
вы должны знать, что время эпохи в java находится в миллисекундах, в то время как то, что вы конвертируете, может быть в секундах. Убедитесь, что обе стороны преобразований находятся в миллисекундах, а затем можно извлечь параметры даты из объекта Date.
попробуйте это...
временная метка эпохи образца 1414492391238
способ:
public static String GetHumanReadableDate(long epochSec, String dateFormatStr) {
Date date = new Date(epochSec * 1000);
SimpleDateFormat format = new SimpleDateFormat(dateFormatStr,
Locale.getDefault());
return format.format(date);
}
удобство:
long timestamp = Long.parseLong(engTime) / 1000;
String engTime_ = GetHumanReadableDate(timestamp, "dd-MM-yyyy HH:mm:ss aa");
результат:
28-10-2014 16:03:11 часов
удачи в кодировании
на основе предыдущих ответов, при прохождении системы по умолчанию Locale
и TimeZone
...
String epochToIso8601(long time) {
String format = "yyyy-MM-dd HH:mm:ss";
SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.getDefault());
sdf.setTimeZone(TimeZone.getDefault());
return sdf.format(new Date(time * 1000));
}
попробуй такое
Date date = new Date(1476126532838L);
DateFormat format = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
format.setTimeZone(TimeZone.getTimeZone("Etc/UTC"));
String formatted = format.format(date);
format.setTimeZone(TimeZone.getTimeZone("Asia/Colombo"));//your zone
formatted = format.format(date);
System.out.println(formatted);