在本文中,我们将为您详细介绍在Java中将Date对象与TimeStamp进行比较的相关知识,并且为您解答关于javadate对象的疑问,此外,我们还会提供一些关于c#–Linqtoentities将
在本文中,我们将为您详细介绍在Java中将Date对象与TimeStamp进行比较的相关知识,并且为您解答关于java date对象的疑问,此外,我们还会提供一些关于c# – Linq to entities将datetime与毫秒精度进行比较、c# – 如何将DateTime与字符串进行比较、datetime、timestamp、date、datetime、Calendar(Java)、datetime与timestamp区别的有用信息。
本文目录一览:- 在Java中将Date对象与TimeStamp进行比较(java date对象)
- c# – Linq to entities将datetime与毫秒精度进行比较
- c# – 如何将DateTime与字符串进行比较
- datetime、timestamp、date、datetime、Calendar(Java)
- datetime与timestamp区别
在Java中将Date对象与TimeStamp进行比较(java date对象)
当我测试此代码时:
java.util.Date date = new java.util.Date();java.util.Date stamp = new java.sql.Timestamp(date.getTime());assertTrue(date.equals(stamp));assertTrue(date.compareTo(stamp) == 0);assertTrue(stamp.compareTo(date) == 0);assertTrue(stamp.equals(date));
我期待一个真实,真实,真实,错误。因为这:
在java.sql.Timestamp的javadoc中,它指出:
注意:此类型是java.util.Date和单独的纳秒值的组合。仅整数秒存储在java.util.Date组件中。小数秒-纳米-
是分开的。传递值java.util.Date类型的值时,Timestamp.equals(Object)方法从不返回true,因为日期的nanos组件是未知的。结果,Timestamp.equals(Object)方法相对于java.util.Date.equals(Object)方法不对称。另外,hashcode方法使用底层的java.util.Date实现,因此在其计算中不包括nanos。由于上述Timestamp类和java.util.Date类之间的差异,建议代码不要以java.util.Date的实例的形式一般性地查看Timestamp值。Timestamp和java.util.Date之间的继承关系实际上表示实现继承,而不是类型继承。
但是相反,我会得到一个真实,错误,真实,错误的信息。有任何想法吗?
- 编辑:当我用equals方法检查两个日期,但其中一个Date对象来自Hibernate类并进行调试时,出现此问题,我看到该对象包含一个TimeStamp。因此equals方法的评估结果为false,然后我发现了这一点:http
- //mattfleming.com/node/141
但是,当我尝试代码时,会得到不同的结果…如果我不能同时使用equals和compareTo,那我应该用什么来检查2个日期是否相同?!
答案1
小编典典tl; dr
使用现代的 java.time 类,而不要使用那些麻烦的旧式日期时间类。
myPreparedStatement.setObject( … , Instant.now() // Capture the current moment in UTC.)
设计不好的旧日期时间类
坦率地说,java.sql.Timestamp / .Date /
.Time类是一个hack,一个糟糕的hack。像java.util.Date/.Calendar一样,它们是错误的设计选择的结果。
应该尽可能简短地使用java.sql类型,仅用于将数据移入/移出数据库。请勿用于业务逻辑和进一步的工作。
java.time
旧的日期时间类已被内置在Java
8及更高版本中的java.time框架取代。这些新类由JSR 310定义,其灵感来自于非常成功的Joda-Time库,并由ThreeTen-Extra项目扩展。
最终,我们应该看到JDBC驱动程序已更新,可以直接与这些java.time类型一起使用。但是直到那一天,我们需要转换为java.sql类型或从java.sql类型转换为。对于此类转换,请调用添加到旧类中的新方法。
一个Instant
是UTC时间线的分辨率了一下纳秒。
Instant instant = myJavaSqlTimestamp.toInstant();
要走另一个方向:
java.sql.Timestamp ts = java.sql.Timestamp.valueOf( instant );
应用一个时区以获得壁钟时间。
ZoneId zoneId = ZoneId.of( "America/Montreal" );ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
java.time类具有简洁明智的类设计。因此您可以按预期使用equals
和compareTo
。需要注意的是有偏移的,UTC或时区的班还提供isEqual
,isBefore
和isAfter
方法。这些方法通过考虑时间轴上的时刻及其时间顺序进行比较。该equals
和compareTo
方法也考虑偏移或时区。
最小化java.sql的使用,同时最大化java.time的使用,使问题的讨论变得毫无意义。
在Hibernate中,将转换器用于java.time。
JDBC 4.2
从JDBC 4.2和更高版本开始,您根本不需要使用旧类。您可以通过&方法直接与数据库交换 java.time
对象。getObject``setObject
myPreparedStatement.setObject( … , instant ) ;
和检索。
Instant instant = myResultSet.getObject( … , Instant.class ) ;
注意,许多数据库无法存储分辨率与 java.time中 使用的纳秒一样精细的 时刻
。您可能想要显式截断而不是让JDBC驱动程序隐式截断。
Instant instant = Instant.now().truncatedTo( ChronoUnit.MILLIS ) ; // Lop off any nanoseconds & microseconds, keeping only the milliseconds, to match limitations of database.
关于 java.time
该 java.time 框架是建立在Java
8和更高版本。这些类取代麻烦的老传统日期时间类,如java.util.Date
,Calendar
,和SimpleDateFormat
。
现在处于维护模式的 Joda-
Time
项目建议迁移到java.time类。
要了解更多信息,请参见
Oracle教程 。并在Stack
Overflow中搜索许多示例和说明。规格为JSR 310。
您可以直接与数据库交换 java.time 对象。使用与JDBC
4.2或更高版本兼容的JDBC驱动程序。不需要字符串,不需要类。java.sql.*
在哪里获取java.time类?
- Java SE 8 , Java SE 9 , Java SE 10 和更高版本
- 内置的
- 标准Java API的一部分,具有捆绑的实现。
- Java 9添加了一些次要功能和修复。
- Java SE 6 和 Java SE 7
- java.time的许多功能在 ThreeTen- Backport中都被反向移植到Java 6和7 。
- 安卓系统
- 更高版本的Android捆绑了java.time类的实现。
- 对于早期的Android(<26), ThreeTenABP 项目改编了 ThreeTen-Backport (如上所述)。请参阅 如何使用ThreeTenABP… 。
该 ThreeTen-额外
项目与其他类扩展java.time。该项目是将来可能向java.time添加内容的试验场。你可能在这里找到一些有用的类,比如Interval
,YearWeek
,YearQuarter
,和更多。
c# – Linq to entities将datetime与毫秒精度进行比较
var query = from orgs in orgBaseQuery.Where(org => org.LastUpdated >= fromDate && org.LastUpdated <= toDate)
toDate和fromDate的类型是.net DateTime,LastUpdated的类型是sql DateTime.我的问题是生成的SQL查询中没有毫秒部分,这导致我们的应用程序出现一些错误.我想知道在没有将LastUpdated的数据类型更改为datetime2的情况下是否有任何解决此问题的方法?
解决方法
c# – 如何将DateTime与字符串进行比较
string user_time = "17:10:03"; //Hours:minutes:seconds DateTime time_Now = DateTime.Now;
如何将此字符串与DateTime进行比较?我想要这样的事情:
if(time_Now > user_time) { //Do something } else { //Do something }
解决方法
var dateTimeStr = "17:10:03"; var user_time = DateTime.Parse( dateTimeStr ); var time_Now = DateTime.Now; if( time_Now > user_time ) { // your code... }
请记住,比较日期/时间有时需要了解时区以使比较有意义.
datetime、timestamp、date、datetime、Calendar(Java)
datetime:
1.允许为空值、可以自定义值,系统不会自动修改其值。
2.不可以设定默认值,所以在不允许为空值的情况下,所以手动指定datetime字段的值才能成功插入数据。
3.虽然不可以设定默认值,但是可以指定datetime字段的值的时候使用now()变量来自动插入系统的当前时间。
显示格式 YYYY-MM-DD HH:mm:ss 显示范围 1601-01-01 到 9999-01-01 (sql)
end:datetime类型适合用来记录数据的原始的创建时间,因为无论你怎么更改记录中其他字段的值,datetime字段的值都不会改变,除非你手动更改它。
timestamp:
1.允许为空值,但是不可以自定义值,所以为空值时没有任何意义。
2.默认值为CURRENT_TIMESTAMO(),其实也就是当前的系统时间。
3.数据库会自动修改其值,所以在插入记录时不需要指定timestamp字段的名称和timestamp字段的值,你只需要在设计表的时候添加一个timestamp字段即可,对应的记录timestamp值 会自动更新为当前的系统时间。
显示格式 YYYY-MM-DD HH:mm:ss 显示范围 1601-01-01 00:00:00 到 9999-12-31 23:59:59 (sql)
end:timestamp类型适合记录数据的最后修改时间,因为只要你更改了记录中的其他字段的值,timestamp字段的值都会自动更新
date:
显示格式 YYYY-MM-DD 显示范围 1601-01-01 00:00:00 到 9999-12-31 23:59:59 (sql)
time:
显示格式 HH:mm:ss 显示范围 00:00:00 到 23:59:59 (sql)
calendar:
在处理日期和时间时,系统推荐使用Calendar进行实现。再设计上,Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类要复杂一点。
Calednar类时抽象类,且Calendar类的构造方法时protected的,所以无法使用Calendar类的构造方法来创建对象,API提供了getInstance方法用来创建对象。
使用该方法获取的Calendar对象就代表当前的系统时间,由于Calendar类tostring实现的没有Date类那么直观,所以直接输出Calendar类的对象意义不大。
Calendar c1=Calendar.getInstance();
c1.set(2019,12-1,21);
使用Calendar类代表特定的时间,首先需要创建一个Calendar的对象,然后再谁都能该对象中的年月日参数来完成。
以上示例设置的时间为2019年12月21日。其参数的结构和Date类不一样,Calendar类中的年份的数值直接书写,月份的值为实际的月份减1,日期的值是实际日期的值。
Calendar.YEAR:年份、Calendar.MONTH:月份、Calendar.DATE:日期
Calendar.DAY_OF_MONTH:日期,和上面的字段完全相同、Calendar.HOUR:12小时制的小时数、Calendar.HOUR_OF_DAY:24小时制的小时数
Calendar.MINUTE:分钟、Calendar.SECOND:秒、Calendar.DAY_OF_WEEK:星期几
c1.set(Calendar.DATE,10);
该代码的作用是将c1对象代表的时间中日期设置为10号,其他所有的数值会被重新计算,例如星期几以及对应的相对时间数值等。
Caledar c2=Calendar.getInstance();
int year=c2.get(Calendar.YEAR); int month = c2.get(Calendar.MONTH) + 1; int date = c2.get(Calendar.DATE); int hour = c2.get(Calendar.HOUR_OF_DAY);
int minute = c2.get(Calendar.MINUTE); int second = c2.get(Calendar.SECOND); int day = c2.get(Calendar.DAY_OF_WEEK);
get方法的声明如下: public int get(int field)
其中参数field代表需要获得的字段的值,字段说明和上面的set方法保持一致。获得的月份为实际的月份值减1,获得的星期的值和Date类不一样。
在Calendar类中,周日是1,周一是2,周二是3,以此类推。
add方法:
public abstract void add(int field,int amount)
该方法的作用是在Calendar对象中的某个字段上增加或减少一定的数值,增加是amount的值为正,减少时amount的值为负。
c2.add(Calendar.DATE, 100);
这里add方法是指在c2对象的Calendar.DATE,也就是日期字段上增加100,类内部会重新计算该日期对象中其它各字段的值,从而获得100天以后的日期
after方法:
public boolean after(Object when)
该方法的作用是判断当前日期对象是否在when对象的后面,如果在when对象的后面则返回true,否则返回false。例如:
Calendar c4 = Calendar.getInstance();
c4.set(2009, 10 - 1, 10);
Calendar c5 = Calendar.getInstance();
c5.set(2010, 10 - 1, 10);
boolean b = c5.after(c4);
在该示例代码中对象c4代表的时间是2009年10月10号,对象c5代表的时间是2010年10月10号,则对象c5代表的日期在c4代表的日期之后,所以after方法的返回值是true。
另外一个类似的方法是before,该方法是判断当前日期对象是否位于另外一个日期对象之前。
getTime方法:
public final Date getTime()
该方法的作用是将Calendar类型的对象转换为对应的Date类对象,两者代表相同的时间点。
类似的方法是setTime,该方法的作用是将Date对象转换为对应的Calendar对象,该方法的声明如下:
public final void setTime(Date date)
转换的示例代码如下:
public final void setTime(Date date)
转换的示例代码如下:
Date d = new Date();
Calendar c6 = Calendar.getInstance();
//Calendar类型的对象转换为Date对象
Date d1 = c6.getTime();
//Date类型的对象转换为Calendar对象
Calendar c7 = Calendar.getInstance();
c7.setTime(d);
Calendar对象和相对时间之间的互转:
Calendar c8 = Calendar.getInstance();
long t = 1252785271098L;
//将Calendar对象转换为相对时间
long t1 = c8.getTimeInMillis();
//将相对时间转换为Calendar对象
Calendar c9 = Calendar.getInstance();
c9.setTimeInMillis(t1);
在转换时,使用Calendar类中的getTimeInMillis方法可以将转换为相对时间。在将相对时间转换为Calendar对象时,首先要创建一个Calendar对象,然后再使用Calendar类的setTimeInMillis方法设置时间即可。
datetime与timestamp区别
datetime与timestamp区别
- 支持时间范围不同:datetime 是1001 ~ 9999年,timestamp 1970 ~ 2038年
- datetime与时区无关,timestamp与时区有关
- datetime存储空间为8字节,timestamp为4字节
- datetime默认为null,timestamp默认为当前时间
我们今天的关于在Java中将Date对象与TimeStamp进行比较和java date对象的分享就到这里,谢谢您的阅读,如果想了解更多关于c# – Linq to entities将datetime与毫秒精度进行比较、c# – 如何将DateTime与字符串进行比较、datetime、timestamp、date、datetime、Calendar(Java)、datetime与timestamp区别的相关信息,可以在本站进行搜索。
本文标签: