需要在Java中获取当前时间戳

use*_*236 50 java format datetime timestamp

我需要获取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()));
Run Code Online (Sandbox Code Playgroud)

或者链接在这里讨论的例子.

Bal*_*usC 71

SimpleDateFormat如果你只是在使用它的方法块内创建它,那么threadunsafety 应该不是问题.换句话说,您不是将它指定为类的静态或实例变量,而是在一个或多个可由多个线程调用的方法中重用它.只有这样SimpleDateFormat才能暴露出线程安全性.但是,您可以安全地在与SimpleDateFormat当前线程仅访问的方法块相同的方法块中重用相同的实例.

此外,java.sql.Timestamp您在那里使用的类不应该被滥用,因为它特定于JDBC API,以便能够在SQL数据库中存储或检索TIMESTAMP/ DATETIME列类型并将其转换为/ 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
Run Code Online (Sandbox Code Playgroud)


Eri*_*ski 15

使用java.sql.Timestamp在java中打印时间戳.

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()));
    }
}
Run Code Online (Sandbox Code Playgroud)

这打印:

2014-08-07 17:34:16.664
Run Code Online (Sandbox Code Playgroud)

使用单线程上的SimpleDateFormat在Java中打印时间戳.

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

    }

}
Run Code Online (Sandbox Code Playgroud)

打印:

08/14/2014 14:10:38
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)


Pra*_*d D 9

试试这个单行解决方案:

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


Dan*_*ler 7

那事实SimpleDateFormat是不是线程安全的,并不意味着你不能使用它.这只意味着您不能使用一次(可能但不一定static)从多个线程一次访问的实例.

相反,只需确保SimpleDateFormat为每个线程创建一个新鲜的.根据定义,在方法中创建为局部变量的实例是安全的,因为无法从任何并发线程访问它们.

可能想看看ThreadLocal该类,但我建议您只需在需要的地方创建一个新实例.当然,您可以将格式定义定义为static final String DATE_FORMAT_PATTERN = "...";某个位置,并将其用于每个新实例.


Mad*_*ota 5

java.time

从Java 8+开始,您可以使用java.time包.具体来说,使用DateTimeFormatterBuilderDateTimeFormatter来格式化模式和文字.

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));
Run Code Online (Sandbox Code Playgroud)

输出 ...

06/22/2015 11:59:14 AM
Run Code Online (Sandbox Code Playgroud)

或者如果你想要不同的时区 ......

// 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()));
Run Code Online (Sandbox Code Playgroud)

输出 ...

06/22/2015 12:38:42 PM
06/22/2015 02:08:42 AM
06/22/2015 12:53:42 PM
Run Code Online (Sandbox Code Playgroud)