How to format a Date to String in Java

Read Time:11 Minute, 54 Second

Table of Contents

Changing the date format of a given Date or String is a typical Java programming task. For example, suppose you have “2022-05-22 12:00:00” and want to convert it to “2022-05-22,” or convert from dd-MM-YY to MM-dd-YY, or any other format you like, as long as it is a valid date format as defined by Java. How will you accomplish this? It’s not that difficult, after all. It’s a simple two-step procedure.

It would help if you first parsed String to construct an equivalent date in the existing format and then converted the date back to String in the new format. The approach is similar to Java 8 and earlier, except for API and class changes.

The format() function of the java.text.DateFormat package is used to convert Date to String in Java.

The java.text.SimpleDateFormat class is used to parse, and format dates according to a custom formatting pattern. The Java SimpleDateFormat usually uses a Java String as a source when processing dates. When formatting dates, the SimpleDateFormat converts a Date object to a String, but it can also convert a Date object to a StringBuffer. The SimpleDateFormat class is responsible for formatting dates in this text.

SimpleDateFormat creation

Create a SimpleDateFormat object like follows:


The date parsing and formatting pattern are specified by the pattern parameter supplied to the SimpleDateFormat constructor. A standard Java String is used as the pattern.

Date Formatting

Once you’ve generated a SimpleDateFormat instance, you can use its format() function to format dates. Consider the following scenario:

The format() function takes a java.util.Date instance as an argument. The following is the output of the SimpleDateFormat example:

Take note of how the formatted date string begins with the year, month, and day. The date pattern supplied to the SimpleDateFormat constructor determines the order of the date fields. As previously stated, this format is discussed further in this Java SimpleDateFormat lesson.

StringBuffer with Date Format

Instead of returning an individual String with the date prepared, the Java SimpleDateFormat class can format a Date object into a StringBuffer. It is accomplished through the SimpleDateFormat class’s format() method, which takes the Date, StringBuffer, and a FieldPosition instance as inputs. Here’s an example of using Java SimpleDateFormat to format a date into a StringBuffer:


It’s unclear how the FieldPosition instance is employed. Whatever the int value supplied to the FieldPosition constructor is, the format() method appends the formatted String to the end of the StringBuffer.

Parsing Dates

The parse() method of the SimpleDateFormat class converts a String to a java.util.Date instance. Consider the following scenario:

After this code is run, the date variable points to a Date instance reflecting May 22nd, 2022.

Creating a Locale-Specific SimpleDateFormat

A SimpleDateFormat instance is created for a specified Java Locale. The dates will be formatted according to the Locale when this is done. A formatting pattern that includes the name of the weekday, for example, will write the weekday in the chosen Locale’s language. Consider the following scenario:

Characters other than these will be inserted into the pattern as normal text and hence into the formatted dates. Some characters are used in several combinations. For example, you can write yy for a two-character version of the year (e.g., 22) or yyyy for a four-character version of the year.(e.g. 2022). See the JavaDoc for the SimpleDateFormat class for further information on the acceptable patterns.


Examples of Patterns

Here are some instances of Java SimpleDateFormat date patterns:


You can change the date symbols used in the formatted output for a certain Locale. A java.text is used to accomplish this. Instance of DateFormatSymbols. Consider the following scenario:

Second, a new set of weekday names has been established. You should note that the initial String, “unused,” is never used. To be indexable by the Calendar.SUNDAY, Calendar.MONDAY and other constants, the indices in this array must begin with one. Calendar.SUNDAY is 1, Calendar.MONDAY is 2, and so on. Third, using the DateFormatSymbols, a SimpleDateFormat is built, and the date is formatted. The following is an example of what the output could look like:

Take note of how the custom weekday name is employed. On the DateFormatSymbols instance, you can add extra date formatting symbols. The following are the procedures for adding extra symbols:

SimpleDateFormat’s Time Zone setting

So far, all of the examples in this lesson have used the system default time zone. If you want to format a date, the SimpleDateFormat will presume you want to format it according to the system’s time zone. This, however, may not always be the case.


The setTimeZone() method of a SimpleDateFormat changes the time zone. The setTimeZone() function takes as an argument a Java TimeZone instance (java.util.TimeZone). Here’s an example of how to change a Java SimpleDateFormat instance’s time zone:

The SimpleDateFormat will modify its formatting once the time zone is set. Here’s an example of changing the time zone to two distinct time zones while formatting the same date:

DateFormat’s format() method

To convert a Date to a String, utilize the format() function of the DateFormat class. DateFormat is a generic type. SimpleDateFormat is a DateFormat child class. It’s how the DateFormat class is implemented. The format() method’s signature is as follows:

Example of Java Date to String

Let’s look at a simple Java code to convert Date to String.

Let’s take a look at the whole example of converting date and time to String in Java using the format() function of the java.text.SimpleDateFormat class.


java.util.Date conversion to String

Although we shouldn’t utilize java.util.Date when dealing with Java 8, there are situations when we don’t have a choice (for example, when the Date object comes from a library we don’t control). In such circumstances, we have numerous options for converting java.util.Date to String.

Getting the Date Object Ready : Let’s start by declaring an anticipated String representation of our date and a date format pattern:

Now we need an actual Date object to convert. To make it, we’ll utilize a Calendar instance:

To avoid complications when working with the new API later, we’ve set the default TimeZone to CET. The Date object does not have a time zone, but its toString() method uses the current default time zone. This Date instance is used in all of the examples that follow.

Using the DateFormat Abstract Class

SimpleDateFormat is a subclass of the abstract DateFormat class, as we can see. This class contains methods for formatting dates and times. We’ll utilize it to get the same result as before:


With this method, we’re passing style patterns — in our case, MEDIUM for the date and SHORT for the time.

The Formatter Class in Action

The Formatter class is another simple way to acquire the same String as previous instances. While it isn’t the most readable approach, it is a thread-safe one-liner that could be beneficial, especially in a multi-threaded environment (we should note that SimpleDateFormat isn’t thread-safe):

We used 1$ to indicate that just one argument would be passed with each flag.

Using the Java 8 Date/Time API for conversion

We should use the Date/Time API from Java 8 instead of the java.util.Date and java.util.Calendar classes whenever possible. Let’s look at how we can use it to convert a Date object to a String. We’ll utilize the DateTimeFormatter class and its format() function this time, along with the same date pattern as above:

We must transform our Date object to an Instant object to use the new API:


We must also convert the Instant object to LocalDateTime because our expected String has both date and time components:

Finally, we can get our formatted String with ease:

How to use JDK 8 to modify the date format in a Java string

To modify the date format of String in Java 8, use the DateTimeFormatter class in JDK 8. The procedures are the same, except we’ll use the DateTimeFormatter and LocalDateTime class instead of SimpleDateFormat and Date.

In Java 8, the DateTimeFormatter class format and parse dates, while LocalDateTime represents a date with local time. Depending on your pattern, you can select the appropriate class. The LocalDatetime class is appropriate for converting the format “yyyy-MM-dd hh:mm:ss” to “yyyy-MM-dd.” If your pattern only contains a date, a LocalDate class is used instead.

Anyway, here’s a code example from JDK 8 for changing the date format in a Java String:


The processes are the same, but the code is robust because of DateTimeFormatter’s expressiveness, thread safety, and immutability. In general, if you use JDK 8, use the new Date and Time API for any new code you develop that has anything to do with dates. Spend some time learning the fundamental classes, such as LocalDate, LocalTime, LocalDateTime, ZonedDateTime, DateTimeFormatter, etc. Most typical tasks have been simplified, such as converting a string to a date and vice versa, formatting and parsing dates, and extracting day, month, and year.

Modifying the date format in a Java String Before JDK 8

If you’re not using JDK 8, you’ll have to rely on the outdated date and calendar API. To alter the date format, use the SimpleDateFormat class. Here are the steps you must take:

1) Use the old approach to create a Date format.

2) Convert String to Date using the following format:

3) Add the new pattern to a DateFormat.


4) Using the new pattern’s Dateformatter, convert the date to a string.

That’s all there is; you now have a String in the desired format. Though you should use the SimpleDateFormat class cautiously, it is not thread-safe and should not be shared in a multi-threading context. Because letters are case-sensitive, “yyyy-mm-dd” and “yyyy-MM-dd” are not interchangeable. The minuscule m stands for a minute, while the large M stands for a month.

Example: Program for formatting the current date to a String and prints it

Example: Using LocalDate.toString() method

  • Get a LocalDate instance from date.
  • Use the toString() function of the LocalDate class to convert the given date to a string.
  • Print the outcome.

Example: Using DateFormat.format() method

  • Get the date you want to convert.
  • When formatting the string representation of the date object, create an instance of the SimpleDateFormat class.
  • Using the Calendar object, get the current date.
  • The format() method converts a date into a string.
  • Print the outcome.

Example: Program for converting Date from one format to another in Java

As we already stated, the stages are the same; just the classes alter. SimpleDateFormat and Date classes are used in Java 7 and earlier, while DateTimeFormatter and LocalDateTime classes are used in Java 8.

Important things to keep in mind

Converting a string to date may appear simple, but it is not. Due to the difficult syntax of a certain pattern for date format, many Java developers commit minor errors.

There are also some minor differences between JDK 8 and previous versions, which implies that a pattern that worked with SimpleDateFormat in JDK 8 may not work with DateTimeFormatter, an equivalent class from Java 8’s new Date and Time API. As a result, while providing a pattern, you must use caution.


When we first ran the application, we got the following error after copying the format from SimpleDateFormat to DateTimeFormatter in the previous code:

The error message is clear: it expects 1 to 12 in the hour column, implying that it expects an AM/PM date rather than a 24-hour format. This was our pattern, “yyyy-MM-dd hh:mm:ss,” which used a little h, i.e. “hh,” to denote the hour of the day.

The mistake disappeared when we changed it to a capital H, i.e. “HH.” You may not have noticed a minor distinction while reading the code.

Another thing to remember is that the capital M, “MM,” is used for months while the little M, “mm,” is used for minutes. Many programmers commit this error while writing a date format pattern.

For example, to produce a date like 2022-05-22, you must use the pattern “dd-MM-yyyy,” not “dd-mm-yyyy,” which will not work but is easier to enter because both dd and yyyy are in a small case. We recommend taking thorough Java classes if you want to understand more about date formatting in Java.



In this tutorial, we’ve explored how to convert Date objects to String objects in Java. Note how we’ve used both the older java.util.Date type, java.util.Calendar classes and the new Date/Time API are introduced in Java 8. The Formatter class was then used, followed by the Java 8 Date/Time API.

For obvious reasons, we recommend using DateTimeFormatter instead of SimpleDateFormat if you’re using Java 8. Some of the outstanding reasons include immutability and thread safety.

That’s everything there is to know about changing the date format of a String in Java. We’ve seen how to accomplish it before and after JDK 8. As we previously stated, it’s a two-step process in which you convert String to date using the old date type and then back to String using the new date format.


CyberSEO Pro - OpenAI GPT-3 autoblogging and content curation plugin for WordPress

Tag Cloud

Java Java Logical Programs OTP Generation in Java python Recursion youtube video ASCII Upper and Lower Case blockchain javascript graph learn to code software development Successful Software Engineers breadth first search Java Array Programs Java Programs Uncategorized android ios programming kotlin web-development django data sql cybersecurity database swiftui serverless aws swift rust react background-position gradients loader mask grid nth-child pseudo elements indieweb WordPress Print Array without brackets C++ factorial Java String Programs Final Keyword Static Variable Axie Infinity Cryptokitties NFT games tool inserting MISC Tips Codes python code python projects python3 system info python project Bigginers How to Do Integrations Payment Gateways PHP checkout page in php Implement stripe payment gateway in Step by step in PHP integrate stripe gatway in php mysql payment gateway integration in php step by step payment gateway integration in php step by step with source code payment gateway integration in website PHP Integrate Stripe Payment Gateway Tutorial PHP shopping cart checkout code shopping cart in php stripe php checkout PHP/MySQL/JSON best international payment gateway does google pay accept international payments how to accept international payments in india paytm payment gateway razorpay codeigniter github razorpay custom checkout github razorpay get payment details razorpay integration in codeigniter github razorpay international payments Razorpay payment gateway integration in CodeIgniter razorpay payment gateway integration in php code Razorpay payment gateway integration with PHP and CodeIgniter Razorpay payment gateway setup in CodeIgniter Library & Frameworks Tips & Tricks UI/UX & Front-end coding birds online html code for google sign in login with google account in PHP login with google account using javascript login with google account using javascript codeigniter login with google account using php login with google account using php source code
8 things about Records in C# you probably didn’t know Previous post 8 things about Records in C# you probably didn’t know
How to calculate the Absolute Value in Python Next post How to calculate the Absolute Value in Python

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.