Java相当于.NET DateTime.MinValue,DateTime.Today

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

是否有Java等价于DateTime.MinValue和DATETIME?今天在Java日期类中?或者实现类似目标的方法?

我已经意识到你在.NET日期时间类上有多糟糕,我还需要与addDays()、addMonths()等效的东西。


事实上Java日期时间API是JoDA时间。

使用它,只需构造new DateTime()就可以得到当前的日期/时间。

同样,如果没有它,您可以使用Calendar.getInstance()new Date()来获取当前日期/时间。

MinValue可以是Calendar.getInstance(0)/new Date(0)。这将使用默认的年表,即从1970年1月1日开始。由于MinValue返回1年1月1日,您可以使用DateTime的适当构造函数简单地指定此日期。


其他答案可能是正确的,但使用过时的课程。

Java.时间

旧的日期时间类(Java.U.L.Deal/Calm等)被JoDA时间所取代,而JoDA时间又被Java.Time框架取代了Java 8和更高版本。JavaTime类是由JoDA时间启发的,由JSR 310定义,由TrutEnEnter Project扩展,通过TeReTeNeN后端项目返回到Java 6和7,并适用于TruteTeNABP项目中的Android。见教程。

要以纳秒分辨率获得UTC时间线上的当前时刻,请使用Instant

1
Instant now = Instant.now();

Instant有三个常量:

  • EPOCH1970-01-01T00:00:00Z
  • MIN-1000000000-01-01T00:00Z
  • MAX1000000000-12-31T23:59:59.999999999Z

要获得当前从UTC偏移的时刻,请应用ZoneOffset获得OffsetDateTime

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

如果知道的话,最好应用一个完整的时区(偏移加上异常情况的规则,如夏令时)。应用ZoneId获得ZonedDateTime

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

你可以做算术。

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

你可以得到一天中的第一个时刻。

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

如果您只需要一个没有时间和时区的日期,请使用LocalDate。同样,LocalTime仅用于没有日期和时区的时间。通常最好坚持使用InstantOffsetDateTimeZonedDateTime,因为Local…类型不代表时间线上的实际时刻(没有偏移或时区表示它们未定义)。

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


.NET和Java中日期/时间特性的比较

1
2
3
4
5
6
7
8
9
10
11
12
13
14
+--------------------+----------------------------------------+----------------------------+
| .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)   |
|                    |                                        |                            |
+--------------------+----------------------------------------+----------------------------+

附加说明:

  • 处理日期和时间是混乱的。此表旨在作为代码迁移的起点。比较比较概念,而不是精确的值(例如.NET的最小日期/时间与Java的值不一样)。
  • JoDaDATETIME是Java的首选日期/时间库。
  • 关于Java中EDOCX1·8的附加注释
  • 用Java的日期来开始一天有点牵涉到这里。
  • .NET DeaTimes默认为本地日期/时间,而在Java中默认为UTC。确保在处理日期和时间时考虑时区的任何影响。

  • 日历http://download.oracle.com/javase/1.5.0/docs/api/java/util/calendar.html下载

    日期http://download.oracle.com/javase/1.4.2/docs/api/java/util/date.html下载

    也有简单的格式化日期格式。http://download.oracle.com/javase/1.4.2/docs/api/java/text/simpledateformat.html


    要获取当前日期:

    calendar calendar=calendar.getInstance();simpledateformat dateformat=new simpledateformat("dd/mm/yyyy");

    1
    2
    3
    4
    5
    6
    7
        try {

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

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

    大多数日期操作现在应该使用日历对象来完成。

    http://download.oracle.com/javase/6/docs/api/java/util/calendar.html下载