需要在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())); 

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

SimpleDateFormat的threadunsafety不应该是一个问题,如果你只是在你使用它的方法块中创build它。 换句话说,你并不是将它分配给一个类的静态variables或实例variables,而是在一个或多个可以被多个线程调用的方法中重用它。 只有这样, SimpleDateFormat的threadunsafety才会被暴露。 但是,您可以安全地在同一个方法块中重复使用同一个SimpleDateFormat实例,因为它只能由当前线程访问。

此外,您正在使用的java.sql.Timestamp类不应该被滥用,因为它是特定于JDBC API的,以便能够在SQL数据库中存储或检索TIMESTAMP / DATETIME列types,并将其从/到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 

Javadate格式图例:

 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 

试试这个单线解决scheme:

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

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

相反,只要确保为每个线程创build一个新的SimpleDateFormat 。 在一个方法内创build为局部variables的实例根据定义是安全的,因为它们不能从任何并发线程到达。

可能想看一下ThreadLocal类,不过我build议你只需要创build一个新的实例。 当然,您可以将格式定义定义为static final String DATE_FORMAT_PATTERN = "..."; 在某个地方,并为每个新的实例使用。

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 

乔达时间

这是相同types的代码,但使用第三方库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 

当我想要一个tmiestamp的时候,我是这样做的

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

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

我想你也需要import java.text.SimpleDateFormat; 标题为它工作:))

您可以使用直接格式的java.util.Date:

 String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Date()); 
 String.format("{0:dddd, MMMM d, yyyy hh:mm tt}", dt); 

有时候这也是有用的。

 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