Подтвердить что ты не робот

Нужно получить текущую временную метку в Java

Мне нужно получить текущую временную метку в Java, с форматом MM/DD/YYYY h:mm:ss AM/PM,

Например: 06/01/2000 10:01:50 AM

Мне тоже нужно быть Threadsafe.

Могу ли я использовать что-то вроде этого?

java.util.Date date = new java.util.Date();
System.out.println(new Timestamp(date.getTime()));

Или примеры, обсуждаемые по ссылке здесь.

4b9b3361

Ответ 1

Неполадка в потоке SimpleDateFormat не должна быть проблемой, если вы просто создадите ее внутри того же самого блока методов, что и вы его используете. Другими словами, вы не назначаете его как статическую или экземплярную переменную класса и повторно используете ее в одном или нескольких методах, которые могут быть вызваны несколькими потоками. Только таким образом будет выставлена ​​защита от потока SimpleDateFormat. Тем не менее, вы можете безопасно повторно использовать один и тот же экземпляр SimpleDateFormat в том же блоке метода, к которому он мог получить доступ только по текущему потоку.

Кроме того, класс java.sql.Timestamp, который вы используете там, не должен подвергаться злоупотреблениям, поскольку он специфичен для JDBC API, чтобы иметь возможность хранить или извлекать тип столбца TIMESTAMP/DATETIME в базе данных SQL и преобразовать его из/в java.util.Date.

Итак, это должно сделать:

Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy h:mm:ss a");
String formattedDate = sdf.format(date);
System.out.println(formattedDate); // 12/01/2011 4:48:16 PM

Ответ 2

Распечатайте временную метку в java, используя java.sql.Timestamp.

import java.sql.Timestamp;
import java.util.Date;

public class GetCurrentTimeStamp {
    public static void main( String[] args ){
        java.util.Date date= new java.util.Date();
        System.out.println(new Timestamp(date.getTime()));
    }
}

Отпечатки:

2014-08-07 17:34:16.664

Распечатайте временную метку в Java с помощью SimpleDateFormat на одном слое.

import java.util.Date;
import java.text.SimpleDateFormat;

class Runner{
    public static void main(String[] args){

        System.out.println(
            new SimpleDateFormat("MM/dd/yyyy HH:mm:ss").format(new Date()));

    }

}

Печать

08/14/2014 14:10:38

Обозначение формата даты Java:

G Era designation      Text               AD
y Year                 Year               1996; 96
M Month in year        Month              July; Jul; 07
w Week in year         Number             27
W Week in month        Number             2
D Day in year          Number             189
d Day in month         Number             10
F Day of week in month Number             2
E Day in week          Text               Tuesday; Tue
a Am/pm marker         Text               PM
H Hour in day (0-23)   Number             0
k Hour in day (1-24)   Number             24
K Hour in am/pm (0-11) Number             0
h Hour in am/pm (1-12) Number             12
m Minute in hour       Number             30
s Second in minute     Number             55
S Millisecond          Number             978
z Time zone            General time zone  Pacific Standard Time; PST; GMT-08:00
Z Time zone            RFC 822 time zone  -0800

Ответ 3

Попробуйте однострочное решение:

import java.util.Date;
String timestamp = 
    new java.text.SimpleDateFormat("MM/dd/yyyy h:mm:ss a").format(new Date());

Ответ 4

Тот факт, что SimpleDateFormat не является потокобезопасным, не означает, что вы не можете его использовать. Это означает только то, что вы не должны использовать один (потенциально, но необязательно static) экземпляр, который получает доступ из нескольких потоков одновременно.

Вместо этого просто создайте свежий SimpleDateFormat для каждого потока. Экземпляры, созданные как локальные переменные внутри метода, безопасны по определению, потому что они не могут быть достигнуты из любых параллельных потоков.

Возможно, вы захотите взглянуть на класс ThreadLocal, хотя я бы рекомендовал просто создать новый экземпляр там, где он вам нужен. Разумеется, вы можете определить формат, определенный как static final String DATE_FORMAT_PATTERN = "...";, и использовать его для каждого нового экземпляра.

Ответ 5

java.time

С Java 8+ вы можете использовать пакет java.time. В частности, используйте DateTimeFormatterBuilder и DateTimeFormatter для форматирования шаблоны и литералы.

DateTimeFormatter formatter = new DateTimeFormatterBuilder()
        .appendPattern("MM").appendLiteral("/")
        .appendPattern("dd").appendLiteral("/")
        .appendPattern("yyyy").appendLiteral(" ")
        .appendPattern("hh").appendLiteral(":")
        .appendPattern("mm").appendLiteral(":")
        .appendPattern("ss").appendLiteral(" ")
        .appendPattern("a")
        .toFormatter();
System.out.println(LocalDateTime.now().format(formatter));

Выход...

06/22/2015 11:59:14 AM

Или, если вам нужен другой часовой пояс...

// system default
System.out.println(formatter.withZone(ZoneId.systemDefault()).format(Instant.now()));
// Chicago
System.out.println(formatter.withZone(ZoneId.of("America/Chicago")).format(Instant.now()));
// Kathmandu
System.out.println(formatter.withZone(ZoneId.of("Asia/Kathmandu")).format(Instant.now()));

Выход...

06/22/2015 12:38:42 PM
06/22/2015 02:08:42 AM
06/22/2015 12:53:42 PM

Ответ 6

Joda времени

Вот такой же код, но с использованием сторонней библиотеки Joda-Time 2.3.

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

org.joda.time.DateTime now = new DateTime();
org.joda.time.format.DateTimeFormatter formatter = DateTimeFormat.forPattern( "MM/dd/yyyy h:mm:ss a" );
String nowAsString = formatter.print( now );

System.out.println( "nowAsString: " + nowAsString );

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

nowAsString: 11/28/2013 11:28:15 PM

Ответ 7

Я сделал это так, когда захотел tmiestamp

    String timeStamp = new SimpleDateFormat("yyyyMMddHHmmss").format(Calendar.getInstance().getTime());

Надеюсь, что это поможет:) Как новичок, я думаю, что это самоочевидно

Мне также нужен импорт java.text.SimpleDateFormat; заголовок для работы:))

Ответ 8

Вы можете использовать java.util.Date с прямым форматом:

String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Date());

Ответ 9

String.format("{0:dddd, MMMM d, yyyy hh:mm tt}", dt);

Ответ 10

Ну, иногда это также полезно.

import java.util.Date;
public class DisplayDate {
public static void main(String args[]) {
   // Instantiate an object
   Date date = new Date();

   // display time and date
   System.out.println(date.toString());}}

вывод образца: Mon Jul 03 19:07:15 IST 2017