需要在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