[英]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 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
您可以使用具有直接日期字符串格式的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.