Java修道之路:日期和时间处理(3) 之 Calendar

之前java都是自学的,所以文章也都叫做“Java自学之路”,但是自今年12月起,开始正式的系统的学习了,也有了比以前更大的信心,所以我觉得要改成“Java修道之路”更贴切一些了,也算做是不再小打小闹的开始吧!当然,不是修道路的道……而是悟出自己对Java的理解和使用经验,这才谓之“道”!

好了,进入正题,今天说说日期处理中的Calendar类的常用方法,当然,我不是大神,只是记录学习的内容,将常用的方法简练的表示出来,供大家学习和参考,也算是复习吧!

Calendar类在 java.util.Calendar 中,是继 Date 类的一个新的日期处理的类,因为 Date 类对于时间处理有很多的不好的地方,所以很多方法都弃用了,改成了 Calender 的方法,不要看 Calendar 类中方法多,它们的确是很好用的,其实只用记住常用的一些方法就好了。

1、创建Calendar的实例,由于Calendar类的构造方法是protected的(受保护的访问权限),所以它提供了一个方法来返回实例:

Calendar c = Calendar.getInstance();

该方法返回的是一个当前日期时间的Calendar对象。

2、Calendar转为 Date

Date d = c.getTime();

这个方法的方法名比较坑,获得Date对象的方法名叫做getTime…… 继续阅读

Hibernate涉及Date变量报“Data truncation”错误

使用Hibernate照着教程写了一个数据存入数据库的代码,数据的类型有int,Sting和java.util.Date,运行报错:

ERROR: Data truncation: Incorrect datetime value: ” for column ‘BIRTHDAY’ at row 1

查阅后感觉是Date数据为空,但打印出来发现并不为空…最后终于发现是JDBC驱动版本太低了导致的……估计新版对Date类型有更新,想想Date类型数据的确是个头痛的事儿。

之前图方便把3.1.13版的JDBC导入了工程,后面重新下载了最新版5.1.37,就没有报错了。

看来写程序还是不能图方便啊,尽量使用新版。

对了,JDBC驱动在MySql网站上也叫做Connector/J,搜索就可以下了!

Hibernate出现“Error parsing JNDI name []”错误解决方法

使用Eclipse编写Hibernate写入数据库的代码,运行能通过,但是有警告:

WARN: HHH000277: Could not bind factory to JNDI
org.hibernate.engine.jndi.JndiException: Error parsing JNDI name []

这是什么原因呢,搜之得到,原来是Eclipse自动生成.cfg.xml文件时,在标签中加入name=””导致的,因此更改如下:

<hibernate-configuration>
 <session-factory>

即去掉name=””,这个貌似是和JNDI有关,还没有这么深入研究,我也说不出所以然啦,这里就这么处理吧。

对了,如果Eclipse打开.xml文档不是显示的代码,而是一些选项框的话,那么在编辑框的下方找到“Source”按钮就可以调回代码模式了。

Java自学之路:Hibernate5.0初始化配置

开始学习Hibernate了,教程是慕课网上找的,结果跟着慕课网上的教程一步一步的折腾了半天,居然发现无法配置Hibernate,具体细节就不说了,直接说原因。

因为慕课网当时做的视频使用的是Hibernate4.2.4(就是4.0),而我现在下的Hibernate最新版是5.0.2(就是5.0),这两个版本的配置方法不一样……

我去啊……这纯粹就是给初学者那本来就脆弱的小心脏猛烈的打击啊!!!经过Derek大神的指点,还是乖乖的看Guide吧,应该有例子……嘿,果不其然,真让我在茫茫的英文字母中找到了案例,直接抄过来就好了。 继续阅读

配置Spring出现“java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory”异常解决方法

配置Spring后,运行Spring程序出现了“Exception in thread “main” java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory”异常,是因为没有将logging.jar引入,因此这里下载logging.jar并引入就解决了。

Java自学之路:日期和时间处理(2) 之 格式转换

上一篇《Java自学之路:日期和时间处理(1) 之 数据库的日期和时间处理》说了数据库里的日期时间格式处理,下面再来说说日期格式的转换吧。

首先我们有了一个时间对象,假设是:

java.util.Date d = new Date();

如果我们直接使用 toString方法并打印出来:

System.out.println(d.toString());

一般会是如下格式输出:

Wed Jul 29 13:21:10 CST 2015

那么,我们想要输出为自定义的格式怎么办呢?如“2015年7月29日 13时21分10秒”或“07.29.2015 13.21.10”。 继续阅读

Java自学之路:日期和时间处理(1) 之 MySQL数据库的日期和时间处理

假设MySQL数据库里面有一个字段叫“date”,存放了日期(年月日)和时间(时分秒)的日期类型,如“2015-07-18 14:03:34”。

那么我们怎么取出来呢?如果你还在用 rs.getDate(column) 那么就继续看看吧!

假设我们已经做好了数据库连接[数据库连接教程见这里],并获得了 ResultSet rs,那么使用如下代码就可以获得date数据了:

import java.sql.Timestamp;
Timestamp ts = rs.getTimestamp("date");
System.out.println(ts.toString());
// 结果是:2015-07-18 14:03:34.0

这样“date”中的数据就被保存在了 ts 中,格式为“yyyy-MM-dd HH:mm:ss.S”(字母意义参见下表,详见API文档 java.text.SimpleDateFormat),文章开始假设的时间显示就是“2015-07-18 14:03:34.0”。 继续阅读

Java自学之路:连接MySQL数据库

当然,是在eclipse中使用~

1、eclipse引入JDBC jar包:mysql-connector-java-x.jar,eclipse的方法如下:
loadExternalArchive
2、引入驱动
Class.forName("com.mysql.jdbc.Driver");
     建立链接()
Connection conn = DiverManager.getConnection(
                 "jdbc:mysql://localhost/database",
                 "root",
                 "root");

上面代码.getConnection()里面有三个参数:数据库URL/数据库名称(”jdbc:mysql://localhost/database”),数据库用户名(”root”),数据库用户密码(”root”),可以先设置成private static final String,然后再调用,方便以后代码的维护。

继续阅读

Java自学之路:数据类型

4类8种:

1、布尔型(boolean)
2、字符型(char)
3、整数型(byte,short,int,long)
4、浮点型(float,double)

类型                 字节空间                  表示范围                      备注
boolean           1字节(8位)           false, true
char                 2字节(16位)        -2e15~2e15-1              u0034
byte                 1字节(8位)          -2e7~2e7-1
short               2字节(16位)        -2e15~2e15-1
int                    4字节(32位)        -2e31~2e31-1
long                 8字节(64位)        -2e63~2e63-1
float                 4字节(32位)        -2e31~2e31-1              精度7位   314 = 3.14e2
double             8字节(64位)        -2e63~2e63-1              精度15位

继续阅读

Java自动装箱陷阱

近日在《深入理解Java虚拟机-JVM高级特性与最佳实践》(周志明著)看到一段Java语法糖中关于自动装箱的代码,这段代码原书作者没有给出分析,我慧眼一瞧,就吓尿了,从来没有这么用过。因为我知道我不知道这样用会产生什么样的我完全不知道的结果,而经过我的实践分析后,我终于知道了这个我之前不知道,现在遇到了又想知道的不知道的问题~~~先看下代码是啥样的。
继续阅读

CountDownLatch(计数锁存器)

最近在学习的时候遇到了一个java提供的类,名字叫CountDownLatch,字面上看起来是计数锁存器,查看下java doc,解释如下:

java.util.concurrent.CountDownLatch extends Object

一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。

用给定的计数初始化CountDownLatch。由于调用了countDown()方法,所以在当前计数到达零之前,await方法会一直受阻塞。之后,会释放所有等待的线程,await 的所有后续调用都将立即返回。这种现象只出现一次——计数无法被重置。如果需要重置计数,请考虑使用CyclicBarrier。
继续阅读

转~java中的sizeof

在C/C++中,当我们想知道一个对象或者一个原始数据类型所占用的内存大小时,只需简单调用sizeof操作符即可,但是,在java中是没有相应的操作符或者方法来直接完成相应功能的。sizeof在C/C++得到大量的运用,是程序员必不可少的工具之一,那么为什么java却不提供呢?要回答这个问题,我们可以从另外一个角度来看,那就是为什么C/C++中要使用sizeof。 继续阅读