Reputation: 818
I need to convert new Date() to Julian date format.is there is any build in java function for this. my exact requirement is
Represents the creation date of the file in Julian date format (0YYDDD): 0 – numeric zero YY – last two digits of the year DDD – day number within the year Can be up to 7 calendar days before the date of transmission Example: 010163 = June 11, 2010
What is really looking is some thing like this
Date date=new Date();
String JulianDtae=date.someFunction()
Any help will be appreciated
Upvotes: 2
Views: 12127
Reputation: 86276
I recommend that you use java.time, the modern Java date and time API, for your date work. The format you need is built in.
LocalDate today = LocalDate.now(ZoneId.systemDefault());
String ordinalDateString = today.format(DateTimeFormatter.ISO_ORDINAL_DATE);
System.out.println(ordinalDateString);
Output for today January 20, 2021 in standard ISO 8601 format:
2021-020
The format you mention, 0YYDDD
, is peculiar. It’s nothing I have seen before. If you’re serious about it, define a formatter that gives it:
DateTimeFormatter peculiarDateFormatter = DateTimeFormatter.ofPattern("0uuDDD");
021020
If the first three digits, 021, were supposed to be the last three digits of the year, java.time can do that too. It requires a few more words:
DateTimeFormatter peculiarDateFormatter = new DateTimeFormatterBuilder()
.appendValueReduced(ChronoField.YEAR, 3, 3, 1950)
.appendValue(ChronoField.DAY_OF_YEAR, 3)
.toFormatter();
For the date in 2021 output is the same as before. For dates in other centuries the first digit will no longer be 0.
The day number of the year that you ask for is called the ordinal date, which is why the built-in formatter also has ordinal in its name. A Julian day is something else, the continuous count of days since January 1, 4713 BCE. The ordinal date is sometimes referred to as Julian, but there is nothing genuinely Julian about it, so to avoid confusion, prefer ordinal over Julian.
Upvotes: 5
Reputation: 21
Actually I think what you need is
String yearYy = new SimpleDateFormat("yy").format(today)
String dayD = new SimpleDateFormat("D").format(today)
String dayDDD = dayD.padLeft(3,'0')
String julianDateString = yearYy + dayDDD
This gives the proper Julian date format - there shouldn't be a leading '0', but you do need to pad the day number so that it's always 3 characters.
...I'm quite sure this could be simplified, but the important thing is that the day number should be padded.
So 20/01/21 gives 21020
(rather than 02120
when using the previous example)
Upvotes: 0
Reputation: 462
Use SimpleDateFormat.
The following code returns the Julian date string for date
according to the format you gave.
String julianDateString = new SimpleDateFormat("'0'yyD").format(date);
Upvotes: 2