java.util.Date vs java.sql.Date

前端 未结 7 2072
青春惊慌失措
青春惊慌失措 2020-11-22 05:13

java.util.Date vs java.sql.Date: when to use which and why?

7条回答
  •  一向
    一向 (楼主)
    2020-11-22 05:58

    LATE EDIT: Starting with Java 8 you should use neither java.util.Date nor java.sql.Date if you can at all avoid it, and instead prefer using the java.time package (based on Joda) rather than anything else. If you're not on Java 8, here's the original response:


    java.sql.Date - when you call methods/constructors of libraries that use it (like JDBC). Not otherwise. You don't want to introduce dependencies to the database libraries for applications/modules that don't explicitly deal with JDBC.

    java.util.Date - when using libraries that use it. Otherwise, as little as possible, for several reasons:

    • It's mutable, which means you have to make a defensive copy of it every time you pass it to or return it from a method.

    • It doesn't handle dates very well, which backwards people like yours truly, think date handling classes should.

    • Now, because j.u.D doesn't do it's job very well, the ghastly Calendar classes were introduced. They are also mutable, and awful to work with, and should be avoided if you don't have any choice.

    • There are better alternatives, like the Joda Time API (which might even make it into Java 7 and become the new official date handling API - a quick search says it won't).

    If you feel it's overkill to introduce a new dependency like Joda, longs aren't all that bad to use for timestamp fields in objects, although I myself usually wrap them in j.u.D when passing them around, for type safety and as documentation.

提交回复
热议问题