How to format a date in Java with SimpleDateFormat?
To create and use SimpleDateFormat, you need to pass in a format string, such as new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 2. Pay attention to case sensitivity and avoid misuse of mixed single-letter formats and YYYY and DD; 3. SimpleDateFormat is not thread-safe. In a multi-thread environment, you should create a new instance or use ThreadLocal every time; 4. When parsing a string using the parse method, you need to catch ParseException, and note that the result does not contain time zone information; 5. It is recommended to use DateTimeFormatter and LocalDateTime instead for Java 8 and above.
Using SimpleDateFormat
to format dates in Java is a very common operation, but it needs to be aware of its usage and some potential pitfalls. Here are some questions and practical suggestions that you may be concerned about.

How to create and use SimpleDateFormat?
To format a date, you first need to create a SimpleDateFormat
instance and pass in the date format you want. For example:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String formattedDate = sdf.format(new Date());
The above code will output a string similar to 2025-04-05 14:30:00
.
The format string "yyyy-MM-dd HH:mm:ss"
here is the key, where:

-
yyyy
indicates year -
MM
indicates month (note that it is capitalized) -
dd
represents date -
HH
means 24-hour hours -
mm
means minutes -
ss
means seconds
You can freely combine these parts according to your needs, such as "yyyy/MM/dd"
or "HH:mm"
.
Common format errors and precautions
There are several error-prone places when using it:

- Case sensitivity :
hh
is 12-hour system, whileHH
is 24-hour system;mm
is minutes, andMM
is month. - Do not mix single letter formats : for example,
y
represents the year, but in reality, it is recommended to useyyyy
to avoid ambiguity. - Thread Safety Issues :
SimpleDateFormat
is not thread-safe. If you use it in a multi-threaded environment, it is best to create a new instance every time or useThreadLocal
wrapper.
For example, the following format is prone to errors:
new SimpleDateFormat("YYYY-mm-DD")
YYYY
and DD
are used here. Although they look like "year, month and day", in fact, YYYY
is the "year of the anniversary" (unlike yyyy
), DD
is the first day of the year (not the day of the month). This error will cause the results to not meet expectations.
How to parse a string as a date?
In addition to formatting, SimpleDateFormat
can also parse strings into Date
objects:
String input = "2025-04-05 14:30:00"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = sdf.parse(input);
But be aware:
- If the input format does not match,
ParseException
will be thrown - The parsed
Date
object is "original time point" without time zone information - If the input contains information such as AM/PM, add
a
to the format to ensure the locale is consistent
Alternative: Java 8 and above are recommended to use java.time
If you are using Java 8 or later, it is recommended to use classes from the java.time
package, such as DateTimeFormatter
and LocalDateTime
, which are more modern, thread-safe and have a clearer API:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); String formatted = LocalDateTime.now().format(formatter);
Although this is beyond SimpleDateFormat
, it is more worth recommending in new projects.
Basically that's it. As long as you remember the rules of format strings and thread safety issues, it will not be difficult to use.
The above is the detailed content of How to format a date in Java with SimpleDateFormat?. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undress AI Tool
Undress images for free

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

When using the argparse module, the parameters that must be provided can be achieved by setting required=True. 1. Use required=True to set optional parameters (such as --input) to be required. If not provided when running the script, an error will be reported; 2. Position parameters are required by default, and there is no need to set required=True; 3. It is recommended to use position parameters for necessary parameters. Occasionally, the optional parameters of required=True are used to maintain flexibility; 4. required=True is the most direct way to control parameters. After use, the user must provide corresponding parameters when calling the script, otherwise the program will prompt an error and exit.

CommentsinJavaareignoredbythecompilerandusedforexplanation,notes,ordisablingcode.Therearethreetypes:1)Single-linecommentsstartwith//andlastuntiltheendoftheline;2)Multi-linecommentsbeginwith/andendwith/andcanspanmultiplelines;3)Documentationcommentsst

The core of using the JavaHttpClientAPI is to create an HttpClient, build an HttpRequest, and process HttpResponse. 1. Use HttpClient.newHttpClient() or HttpClient.newBuilder() to configure timeouts, proxy, etc. to create clients; 2. Use HttpRequest.newBuilder() to set URI, method, header and body to build requests; 3. Send synchronous requests through client.send() or send asynchronous requests through client.sendAsync(); 4. Use BodyHandlers.ofStr

ThebestJavaIDEin2024dependsonyourneeds:1.ChooseIntelliJIDEAforprofessional,enterprise,orfull-stackdevelopmentduetoitssuperiorcodeintelligence,frameworkintegration,andtooling.2.UseEclipseforhighextensibility,legacyprojects,orwhenopen-sourcecustomizati

LinkedList is a bidirectional linked list in Java, implementing List and Deque interfaces. It is suitable for scenarios where elements are frequently inserted and deleted. Especially when operating on both ends of the list, it has high efficiency, but the random access performance is poor and the time complexity is O(n). Insertion and delete can reach O(1) at known locations. Therefore, it is suitable for implementing stacks, queues, or situations where structures need to be dynamically modified, and is not suitable for read-intensive operations that frequently access by index. The final conclusion is that LinkedList is better than ArrayList when it is frequently modified but has fewer accesses.

Restartyourrouterandcomputertoresolvetemporaryglitches.2.RuntheNetworkTroubleshooterviathesystemtraytoautomaticallyfixcommonissues.3.RenewtheIPaddressusingCommandPromptasadministratorbyrunningipconfig/release,ipconfig/renew,netshwinsockreset,andnetsh

Use .equals() to compare string content, because == only compare object references rather than actual characters; 2. Use .equalsIgnoreCase() when comparing ignoring case; 3. Use .compareTo() when sorting alphabetically, and .compareToIgnoreCase() when ignoring case; 4. Avoid calling strings that may be null. Equals() should be used to use "literal".equals(variable) or Objects.equals(str1,str2) to safely handle null values; in short, always pay attention to content comparison rather than reference,

Checksearchsettingslike"Matchentirecellcontents"and"Matchcase"byexpandingOptionsinFindandReplace,ensuring"Lookin"issettoValuesand"Within"tocorrectscope;2.Lookforhiddencharactersorformattingbycopyingtextdirectly
