日期格式的那些坑

最近在项目过程中测试突然发现一个这样有趣的现象,显示跟实际不一样,经多方查找资料,原来如此,废话不多说,上代码:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class SimpleDateFormatTest {

/**
* 简单的解释一下原因,我们知道,yyyy代表年,MM代表月,
* dd代表天,HH代表小时,mm代表分钟,ss代表秒,
* SimpleDateFormat应该是根据传入的值和初始化时候的format串进行匹配,
* 所有第一个2012-09-05,转换的结果就成了
* yyyy(2012) MM(没有给,默认值为01),dd(05), HH(00),mm(09),ss(00),
* 所以自然而然的就成了 2012-01-05.
* 关于第二个,输入的时间是2012-01-05 00:05:00,映射的结果为:
* yyyy(2012), mm(01),dd(05),HH(00),MM(01),ss(05),
* 所有应该就变成了 2012-05-05 00:01:00了。这个由于并不报错,这种错误有时候的潜伏期也比较长。
* @throws Exception
*/
public static void main(String[] args) throws Exception {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
long time = format.parse("2012-09-05").getTime();
System.out.println(time);
System.out.println(new Date(time));
format = new SimpleDateFormat("yyyy-mm-dd HH:MM:ss");
time = format.parse("2012-01-05 00:05:00").getTime();
System.out.println(time);
System.out.println(new Date(time));

//得出的结论是Calendar得到的月份是从0-11的,所以需要正确 显示的话需要+1
Calendar c = Calendar.getInstance();
System.out.println(c.get(Calendar.YEAR)+"-"
+(c.get(Calendar.MONTH)+1)+"-"+(c.get(Calendar.DAY_OF_MONTH))+" "
+c.get(Calendar.HOUR)+":"+c.get(Calendar.MINUTE)+":"+c.get(Calendar.MILLISECOND));

System.out.println("============================");
System.out.println(c.get(Calendar.DAY_OF_WEEK));

String str = "";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

//本月的最后 一天
Calendar lastDate = Calendar.getInstance();
lastDate.add(Calendar.MONTH, -1);// 减一个月
lastDate.set(Calendar.DATE, 1);// 把日期设置为当月第一天
lastDate.roll(Calendar.DATE, -1);// 日期回滚一天,也就是本月最后一天
str = sdf.format(lastDate.getTime());
System.out.println(str);
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值