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

时间:2011-12-01 16:45:26

标签: java datetime format 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()));

或链接here中讨论的示例。

11 个答案:

答案 0 :(得分:70)

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

答案 1 :(得分: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()));
    }
}

打印:

2014-08-07 17:34:16.664

在单行上使用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()));

    }

}

打印:

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

答案 2 :(得分:9)

试试这个单行解决方案:

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

答案 3 :(得分:7)

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

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

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

答案 4 :(得分:5)

java.time

从Java 8+开始,您可以使用java.time package。具体来说,使用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));

输出......

06/22/2015 11:59:14 AM

或者如果您想要不同的time zone ...

// 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

答案 5 :(得分:3)

您可以使用直接日期字符串格式的java.util.Date

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

答案 6 :(得分:2)

约达时间

这是相同类型的代码,但使用的是第三方库Joda-Time 2.3。

在现实生活中,我会指定一个time zone,因为依赖默认区域通常是一种不好的做法。但为了简单起见,这里省略了。

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 :(得分:1)

当我想要一个tmiestamp

时,我这样做了
    String timeStamp = new SimpleDateFormat("yyyyMMddHHmmss").format(Calendar.getInstance().getTime());

希望它有所帮助:)作为一个新手,我认为这是不言自明的

我认为你还需要导入java.text.SimpleDateFormat;标题让它工作:))

答案 8 :(得分:0)

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

答案 9 :(得分:0)

有时这也很有用。

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

答案 10 :(得分:0)

    public class TimeStampExample {

        private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss");
        Timestamp timestamp = new Timestamp(System.currentTimeMillis());

        public static void main(String[] args) {


        System.out.println(timestamp);

        System.out.println(timestamp.getTime());

        Instant instant = timestamp.toInstant();

        System.out.println(instant);

        System.out.println(instant.toEpochMilli());



            Timestamp timestamp = new Timestamp(System.currentTimeMillis());
            System.out.println(timestamp);


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


            System.out.println(timestamp.getTime());


            System.out.println(sdf.format(timestamp));

        }

    }