I am using following code to get date in \"dd/MM/yyyy HH:mm:ss.SS\" format.
import java.text.SimpleDateFormat;
import java.util.Calendar;
import
You can't - because you're calling Date.toString()
which will always include the system time zone if that's in the default date format for the default locale. The Date
value itself has no concept of a format. If you want to format it in a particular way, use SimpleDateFormat.format()
... using Date.toString()
is almost always a bad idea.
Here's a simple snippet working in Java 8 and using the "new" date and time API LocalDateTime:
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss.SS");
LocalDateTime now = LocalDateTime.now();
System.out.println(dtf.format(now));
Disclaimer: this answer does not endorse the use of the Date
class (in fact it’s long outdated and poorly designed, so I’d rather discourage it completely). I try to answer a regularly recurring question about date and time objects with a format. For this purpose I am using the Date
class as example. Other classes are treated at the end.
You don’t want a Date
with a specific format. Good practice in all but the simplest throw-away programs is to keep your user interface apart from your model and your business logic. The value of the Date
object belongs in your model, so keep your Date
there and never let the user see it directly. When you adhere to this, it will never matter which format the Date
has got. Whenever the user should see the date, format it into a String
and show the string to the user. Similarly if you need a specific format for persistence or exchange with another system, format the Date
into a string for that purpose. If the user needs to enter a date and/or time, either accept a string or use a date picker or time picker.
Special case: storing into an SQL database. It may appear that your database requires a specific format. Not so. Use yourPreparedStatement.setObject(yourParamIndex, yourDateOrTimeObject)
where yourDateOrTimeObject
is a LocalDate
, Instant
, LocalDateTime
or an instance of an appropriate date-time class from java.time. And again don’t worry about the format of that object. Search for more details.
A Date
hasn’t got, as in cannot have a format. It’s a point in time, nothing more, nothing less. A container of a value. In your code sdf1.parse
converts your string into a Date
object, that is, into a point in time. It doesn’t keep the string nor the format that was in the string.
To finish the story, let’s look at the next line from your code too:
System.out.println("Current date in Date Format: "+date);
In order to perform the string concatenation required by the +
sign Java needs to convert your Date
into a String
first. It does this by calling the toString
method of your Date
object. Date.toString
always produces a string like Thu Jan 05 21:10:17 IST 2012
. There is no way you could change that (except in a subclass of Date
, but you don’t want that). Then the generated string is concatenated with the string literal to produce the string printed by System.out.println
.
In short “format” applies only to the string representations of dates, not to the dates themselves.
I think what I’ve written is quite as we should expect. It’s similar to other types. Think of an int
. The same int
may be formatted into strings like 53,551
, 53.551
(with a dot as thousands separator), 00053551
, +53 551
or even 0x0000_D12F
. All of this formatting produces strings, while the int
just stays the same and doesn’t change its format. With a Date
object it’s exactly the same: you can format it into many different strings, but the Date
itself always stays the same.
No, you cannot, and for the same reasons as above. None of the mentioned classes, in fact no date or time class I have ever met, can have a format. You can have your desired format only in a String
outside your date-time object.
Date
)use
Date date = new Date();
String strDate = sdf.format(date);
intead Of
Calendar cal = Calendar.getInstance();
String strDate = sdf.format(cal.getTime());