Ответ 1
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
Код ниже дает мне текущее время. Но это ничего не говорит о миллисекундах.
public static String getCurrentTimeStamp() {
SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//dd/MM/yyyy
Date now = new Date();
String strDate = sdfDate.format(now);
return strDate;
}
Я получаю дату в формате 2009-09-22 16:47:08
(ГГГГ-ММ-ДД ЧЧ: МИ: Сек).
Но я хочу получить текущее время в формате 2009-09-22 16:47:08.128
((ГГГГ-ММ-ДД ЧЧ: MI: Sec.Ms) - где 128 показывает миллисекунду.
SimpleTextFormat
будет работать нормально. Здесь самая низкая единица времени - секунда, но как мне получить и миллисекунду?
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
Один одноярусный Java
public String getCurrentTimeStamp() {
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date());
}
в стиле JDK8
public String getCurrentLocalDateTimeStamp() {
return LocalDateTime.now()
.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));
}
Вам нужно добавить только поле миллисекунды в строку формата даты:
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
API-документ SimpleDateFormat подробно описывает строку формата.
попробуйте следующее: -
http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS");
Date date = new Date();
System.out.println(dateFormat.format(date));
или
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Calendar cal = Calendar.getInstance();
System.out.println(dateFormat.format(cal.getTime()));
Instant.now()
.toString()
2016-05-06T23: 24: 25.694Z
ZonedDateTime.now(
ZoneId.of( "America/Montreal" )
).format( DateTimeFormatter.ISO_LOCAL_DATE_TIME )
.replace( "T" , " " )
2016-05-06 19: 24: 25.694
В Java 8 и более поздних версиях мы создали java.time, встроенную в Java 8 и более поздние версии. Эти новые классы вытесняют неприятные старые классы java.util.Date/.Calendar. Новые классы вдохновлены очень успешной структурой Joda-Time, предназначенной в качестве ее преемника, схожей по понятию, но с повторной архитектурой. Определено JSR 310. Расширено в проекте ThreeTen-Extra. См. Tutorial.
Помните, что java.time способен nanosecond разрешение (9 знаков после запятой в доли секунды), по сравнению с millisecond разрешение (3 десятичных знака) как java.util.Date, так и Joda-Time. Поэтому, когда форматирование отображает только 3 десятичных знака, вы можете скрывать данные.
Если вы хотите исключить любые микросекунды или наносекунды из ваших данных, обрезайте.
Instant instant2 = instant.truncatedTo( ChronoUnit.MILLIS ) ;
В классах java.time по умолчанию используется формат ISO 8601 при разборе/генерации строк. A Z
в конце короткий для Zulu
и означает UTC.
An Instant
представляет момент на временной шкале в UTC с разрешением до наносекунд. Захват текущего момента в Java 8 ограничивается миллисекундами, с новой реализацией в Java 9, захватывающей до наносекунд, в зависимости от ваших возможностей аппаратных часов компьютера.
Instant instant = Instant.now (); // Current date-time in UTC.
String output = instant.toString ();
2016-05-06T23: 24: 25.694Z
Замените T
посередине пробелом и Z
на ничего, чтобы получить желаемый результат.
String output = instant.toString ().replace ( "T" , " " ).replace( "Z" , "" ; // Replace 'T', delete 'Z'. I recommend leaving the `Z` or any other such [offset-from-UTC][7] or [time zone][7] indicator to make the meaning clear, but your choice of course.
2016-05-06 23: 24: 25.694
Поскольку вы не хотите включать смещение или часовой пояс, сделайте "локальную" дату-дату, не связанную с какой-либо конкретной локалью.
String output = LocalDateTime.now ( ).toString ().replace ( "T", " " );
Очень успешная библиотека Joda-Time была вдохновением для рамки java.time. Желательно перейти на java.time, когда это удобно.
Формат ISO 8601 включает миллисекунды и по умолчанию используется для Joda-Time 2.4.
System.out.println( "Now: " + new DateTime ( DateTimeZone.UTC ) );
При запуске...
Now: 2013-11-26T20:25:12.014Z
Кроме того, вы можете запросить миллисекундную долю секунды в виде числа, если необходимо:
int millisOfSecond = myDateTime.getMillisOfSecond ();
Самый простой способ был (до Java 8) использовать,
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
Но SimpleDateFormat не является потокобезопасным. Ни java.util.Date. Это приведет к потенциальным проблемам параллелизма для пользователей. И есть много проблем в этих существующих проектах. Чтобы преодолеть это сейчас в Java 8, у нас есть отдельный пакет с именем java.time. Этот документ Java SE 8 Date and Time содержит хороший обзор.
Таким образом, в Java 8 что-то вроде ниже поможет (для форматирования текущей даты/времени),
LocalDateTime.now()
.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));
И стоит отметить, что он был разработан с помощью популярной сторонней библиотеки joda-time,
Проект был проведен совместно автором Joda-Time (Стивен Коулборн) и Oracle, в рамках JSR 310, и появится в новом пакете Java SE 8 java.time.
Но теперь joda-time
устарела и попросила пользователей перейти на новый java.time
.
Обратите внимание, что начиная с Java SE 8 и далее пользователям предлагается перейти на java.time(JSR-310) - основную часть JDK, которая заменяет этот проект.
Во всяком случае, сказав это,
Если у вас есть экземпляр Calendar, вы можете использовать его ниже, чтобы преобразовать его в новый java.time
,
Calendar calendar = Calendar.getInstance();
long longValue = calendar.getTimeInMillis();
LocalDateTime date =
LocalDateTime.ofInstant(Instant.ofEpochMilli(longValue), ZoneId.systemDefault());
String formattedString = date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));
System.out.println(date.toString()); // 2018-03-06T15:56:53.634
System.out.println(formattedString); // 2018-03-06 15:56:53.634
Если у вас был объект Date,
Date date = new Date();
long longValue2 = date.getTime();
LocalDateTime dateTime =
LocalDateTime.ofInstant(Instant.ofEpochMilli(longValue2), ZoneId.systemDefault());
String formattedString = dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));
System.out.println(dateTime.toString()); // 2018-03-06T15:59:30.278
System.out.println(formattedString); // 2018-03-06 15:59:30.278
Если у вас только были эпохи миллисекунд,
LocalDateTime date =
LocalDateTime.ofInstant(Instant.ofEpochMilli(epochLongValue), ZoneId.systemDefault());
Я бы использовал что-то вроде этого:
String.format("%tF %<tT.%<tL", dateTime);
Переменная dateTime
может быть любая дата и/или значение времени, см JavaDoc для Formatter
.
В дополнение к приведенным выше ответам, это небольшой рабочий пример программы, которая печатает текущее время и дату, включая миллисекунды.
import java.text.SimpleDateFormat;
import java.util.Date;
public class test {
public static void main(String argv[]){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
Date now = new Date();
String strDate = sdf.format(now);
System.out.println(strDate);
}
}
Используйте это, чтобы получить ваше текущее время в указанном формате:
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.print(dateFormat.format(System.currentTimeMillis())); }
Я не вижу ссылки на это:
SimpleDateFormat f = new SimpleDateFormat("yyyyMMddHHmmssSSS");
вышеуказанный формат также полезен.
Документ в Java 8 называет его доли секунды, а в Java 6 - миллисекунду. Это привело меня в замешательство
Ans:
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
ZonedDateTime start = Instant.now().atZone(ZoneId.systemDefault());
String startTimestamp = start.format(dateFormatter);
Вы можете просто получить его в нужном формате.
String date = String.valueOf(android.text.format.DateFormat.format("dd-MM-yyyy", new java.util.Date()));