How can I add 18 as day to current month using java Instant

182 views Asked by At

I can get the current date using

 Instant.now()

I am looking to get 18-<current month>-<current year>

2

There are 2 answers

2
Basil Bourque On

tl;dr

YearMonth                             // Represents a year and month only, no day of month. 
.now( 
    ZoneId.of( "America/Edmonton" )   // Returns a `ZoneId` object. 
)
.atDay( 18 )                          // Returns a `LocalDate` object. 
.format(
    DateTimeFormatter
    .ofPattern( "dd-MM-uuuu" )
)                                     // Returns a `String` object. 

Details

As Comments by Ole V.V. explain, you are using the wrong class. No need for Instant here.

  • To represent a date, use LocalDate.
  • To represent a year and month, use YearMonth.

Capture the current year-month.

Doing so requires a time zone. For any given moment, the date varies around the globe by time zone. So the current month could be simultaneously “next month” in Tokyo Japan while “last month” in Toledo Ohio.

ZoneId z = ZoneId.of( "Pacific/Auckland" ) ;
YearMonth ym = YearMonth.now( z ) ;

If you want the current month as seen with an offset of zero hours-minutes-seconds from UTC, use ZoneOffset.UTC constant.

YearMonth ym = YearMonth.now( ZoneOffset.UTC ) ;

Apply a day of month to get a date.

LocalDate ld = ym.atDay( 18 ) ;

Generate text in standard ISO 8601 format.

String output = ld.toString() ;

Generate text in a specific format.

DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd-MM-uuuu" ) ;
String output = ld.format( f ) ;
2
Arvind Kumar Avinash On

I endorse Basil Bourque's answer. However, if you are looking for an Instant object, you can get it by adjusting the current OffsetDateTime at UTC to 18th day of the month as shown below:

public class Main {
    public static void main(String[] args) {
        Instant thisInstantOn18th = OffsetDateTime.now(ZoneOffset.UTC)
                                    .with(ChronoField.DAY_OF_MONTH, 18)
                                    .toInstant();
        System.out.println(thisInstantOn18th);
    }
}

Output:

2022-12-18T19:19:20.128313Z

Learn more about the modern Date-Time API from Trail: Date Time.