可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I need to get the current timestamp in Java, with the format of MM/DD/YYYY h:mm:ss AM/PM
,
For example: 06/01/2000 10:01:50 AM
I need it to be Threadsafe as well.
Can I utilize something like this?
java.util.Date date = new java.util.Date();
System.out.println(new Timestamp(date.getTime()));
Or the examples discussed at the link here.
回答1:
The threadunsafety of SimpleDateFormat
should not be an issue if you just create it inside the very same method block as you use it. In other words, you are not assigning it as static or instance variable of a class and reusing it in one or more methods which can be invoked by multiple threads. Only this way the threadunsafety of SimpleDateFormat
will be exposed. You can however safely reuse the same SimpleDateFormat
instance within the very same method block as it would be accessed by the current thread only.
Also, the java.sql.Timestamp
class which you're using there should not be abused as it's specific to the JDBC API in order to be able to store or retrieve a TIMESTAMP
/DATETIME
column type in a SQL database and convert it from/to java.util.Date
.
So, this should do:
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
回答2:
Print a Timestamp in java, using the java.sql.Timestamp.
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()));
}
}
This prints:
2014-08-07 17:34:16.664
Print a Timestamp in Java using SimpleDateFormat on a one-liner.
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()));
}
}
Prints:
08/14/2014 14:10:38
Java date format legend:
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
回答3:
Try this single line solution :
import java.util.Date;
String timestamp =
new java.text.SimpleDateFormat("MM/dd/yyyy h:mm:ss a").format(new Date());
回答4:
The fact that SimpleDateFormat
is not thread-safe does not mean you cannot use it.
What that only means is that you must not use a single (potentially, but not necessarily static
) instance that gets accessed from several threads at once.
Instead, just make sure you create a fresh SimpleDateFormat
for each thread. Instances created as local variables inside a method are safe by definition, because they cannot be reached from any concurrent threads.
You might want to take a look at the ThreadLocal
class, although I would recommend to just create a new instance wherever you need one. You can, of course, have the format definition defined as a static final String DATE_FORMAT_PATTERN = "...";
somewhere and use that for each new instance.
回答5:
java.time
As of Java 8+ you can use the java.time package. Specifically, use DateTimeFormatterBuilder and DateTimeFormatter to format the patterns and literals.
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));
The output ...
06/22/2015 11:59:14 AM
Or if you want different 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()));
The output ...
06/22/2015 12:38:42 PM
06/22/2015 02:08:42 AM
06/22/2015 12:53:42 PM
回答6:
You can make use of java.util.Date
with direct date string format:
String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Date());
回答7:
Joda-Time
Here is the same kind of code but using the third-party library Joda-Time 2.3.
In real life, I would specify a time zone, as relying on default zone is usually a bad practice. But omitted here for simplicity of example.
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 );
When run…
nowAsString: 11/28/2013 11:28:15 PM
回答8:
I did it like this when I wanted a tmiestamp
String timeStamp = new SimpleDateFormat("yyyyMMddHHmmss").format(Calendar.getInstance().getTime());
Hope it helps :) As a newbie I think it's self-explanatory
I think you also need import java.text.SimpleDateFormat; header for it to work :))
回答9:
String.format("{0:dddd, MMMM d, yyyy hh:mm tt}", dt);
回答10:
well sometimes this is also useful.
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());}}
sample output: Mon Jul 03 19:07:15 IST 2017
回答11:
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));
}
}