Java equivalent of .NET DateTime.MinValue, DateTime.Today

Is there a Java equivalent of DateTime.MinValue and DateTime.Today in the Java Date class? Or a way of achieving something similar?

I've realised how spoilt you are with the .NET datetime class, I also need the equivalent of AddDays(), AddMonths().

Answers


The de-facto Java datetime API is joda-time.

With it, you can get the current date/time by just constructing new DateTime().

Similarly, Without it, you can use Calendar.getInstance() or new Date() to obtain the current date/time.

MinValue can be Calendar.getInstance(0) / new Date(0). This would use the default chronology - i.e. since January 1st, 1970. Since MinValue returns Januar 1st, year 1, you can do that be simply specifying this date, using the appropriate constructor of DateTime.


Comparison of Date/Time features in .NET and Java
+--------------------+----------------------------------------+----------------------------+
| .NET DateTime (C#) | Joda  DateTime (Java) [See Note #2]    | Java Date                  |
+--------------------+----------------------------------------+----------------------------+
|                    |                                        |                            |
| DateTime.MinValue  | new DateTime(Long.MIN_VALUE)           | new Date(Long.MIN_VALUE)   |
|                    |                                        |    [See Note #3]           |
|                    |                                        |                            |
| DateTime.Today     | new DateTime().withTimeAtStartOfDay()  | Messy [See Note #4]        |
|                    |                                        |                            |
| DateTime.Now       | new DateTime()                         | new Date()                 |
|                    |                                        |                            |
| DateTime.MaxValue  | new DateTime(Long.MAX_VALUE)           | new Date(Long.MAX_VALUE)   |
|                    |                                        |                            |
+--------------------+----------------------------------------+----------------------------+

Additional notes:

  1. Dealing with dates and times is messy. This table is intended to be a starting point for code migrations. The comparisons compare concepts, not exact values (e.g. .NET's minimum date/time is not the same value as Java's)
  2. Joda DateTime is the preferred date/time library for Java.
  3. See additional notes on new Date(Long.MIN_VALUE) in Java
  4. Getting start of day with Java's Date is a little more involved - see here.
  5. .NET DateTimes default to local date/time, whereas in Java they default to UTC. Make sure to consider any impact of timezones when working with dates and times.

The other Answers may be correct but use outmoded classes.

java.time

The old date-time classes (java.util.Date/.Calendar etc.) were supplanted by Joda-Time, which in turn has been supplanted by the java.time framework built into Java 8 and later. The java.time classes are inspired by Joda-Time, defined by JSR 310, extended by the ThreeTen-Extra project, back-ported to Java 6 & 7 by the ThreeTen-Backport project, and adapted to Android in the ThreeTenABP project. See Tutorial.

To get the current moment on the timeline in UTC with a resolution of nanoseconds, use Instant.

Instant now = Instant.now();

Instant has three constants:

  • EPOCH – 1970-01-01T00:00:00Z
  • MIN – -1000000000-01-01T00:00Z
  • MAX – 1000000000-12-31T23:59:59.999999999Z

To get the current moment for an offset-from-UTC, apply a ZoneOffset to get an OffsetDateTime.

OffsetDateTime now = OffsetDateTime.now( ZoneOffset.of( "-04:00" ) );

Better to apply a full time zone (offset plus rules for anomalies such as Daylight Saving Time) if known. Apply a ZoneId to get a ZonedDateTime.

ZonedDateTime now = ZonedDateTime.now( ZoneId.of( "America/Montreal" ) );

You can perform arithmetic.

ZonedDateTime dayLater = now.plusDays( 1 );
ZonedDateTime monthLater = now.plusMonths( 1 );

You can get the first moment of a day.

ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime tomorrowStart = now.toLocalDate().atStartOfDay( zoneId );  // Usually time-of-day of `00:00:00.0` but not always.

If you need only a date without time-of-day and without time zone, use LocalDate. Similarly, LocalTime for time-only without date and without time zone. Usually better to stick with Instant and OffsetDateTime/ZonedDateTime as the Local… types do not represent actual moments on the timeline (no offset or time zone means they are undefined).

LocalDate localDate = LocalDate.now( zoneId );
LocalTime localTime = LocalTime.now( zoneId );

Most date manipulation should be done using the Calendar object now.

http://download.oracle.com/javase/6/docs/api/java/util/Calendar.html


to get the current date:

Calendar calendar = Calendar.getInstance(); SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");

    try {

        System.out.println("Today: " + dateFormat.format(calendar.getTime()));

    } catch (Exception e) {
        e.printStackTrace();
    }

Theres calendar http://download.oracle.com/javase/1.5.0/docs/api/java/util/Calendar.html

And date http://download.oracle.com/javase/1.4.2/docs/api/java/util/Date.html

Theres also simpledateformat for formatting. http://download.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html


Need Your Help

Setting IsModified on EntityFramework Decimal Property

entity-framework decimal

I'm somewhat new to EF, and trying to make an UPDATE method in REST style that will take one or more properties in an object and update the database with just those I passed in.

Griffon JavaFX sample app can't compile

javafx-2 griffon

I can't run the sample app from aalmiray's blog "The Griffon Trove: dialogs and JavaFX".