簡體   English   中英

需要獲取Java中的當前時間戳

[英]Need to get current timestamp in Java

我需要獲取Java中的當前時間戳,格式為MM/DD/YYYY h:mm:ss AM/PM

例如: 06/01/2000 10:01:50 AM

我也需要它是線程安全的。

我可以利用這樣的東西嗎?

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

此處鏈接中討論的示例。

如果僅在與使用它相同的方法塊內創建它,則SimpleDateFormat的線程不安全性就不會成為問題。 換句話說,您不會將其分配為類的靜態變量或實例變量,而不會在可被多個線程調用的一個或多個方法中重用它。 只有這樣,才會暴露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

使用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

試試這個單行解決方案:

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

SimpleDateFormat不是線程安全的事實並不意味着您不能使用它。 這僅意味着您不得使用一次從多個線程訪問的單個(可能但不一定是static )實例。

相反,只需確保為每個線程創建一個新的SimpleDateFormat 根據定義,在方法內部創建為局部變量的實例是安全的,因為無法從任何並發線程訪問它們。

盡管我建議您僅在需要的地方創建一個新實例,但您可能想看一下ThreadLocal類。 當然,您可以將格式定義定義為static final String DATE_FORMAT_PATTERN = "..."; 並將其用於每個新實例。

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

輸出 ...

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

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

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

喬達時代

這是相同類型的代碼,但使用的是第三方庫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

我想要這樣的時候就做到了

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

希望對您有所幫助:)作為新手,我認為這是不言而喻的

我認為您還需要導入java.text.SimpleDateFormat;。 標頭使其工作:))

有時候這也很有用。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM