`

日期格式的那些坑

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

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);
	}

}
分享到:
评论

相关推荐

    Layer UI表格列日期格式化及取消自动填充日期的实现方法

    在使用Layer UI框架进行前端开发时,表格列的日期格式化和处理自动填充日期的问题是常见的需求。Layer UI提供了一套强大的解决方案,使得我们可以轻松地对表格中的日期字段进行定制化展示。本文将详细介绍如何实现这...

    python中有关时间日期格式转换问题

    每次遇到pandas的dataframe某列日期格式问题总会哉坑,下面记录一下常用时间日期函数…. 1、字符串转化为日期 str—>date import datetime date_str = '2006-01-03' date_ = datetime.datetime.strptime(date_str,'...

    java日期控件

    这些日期控件通常允许一定程度的自定义,包括更改显示样式、调整日期格式、添加事件监听等。对于更复杂的日期选择需求,开发者可能需要自定义控件或者利用现有的控件进行组合和扩展。 总的来说,Java日期控件是Java...

    免费报表工具UReport使用及避坑手册.doc

    下面是 UReport2 的使用指南和避坑手册。 UReport2 介绍 UReport2 是基于 Java 语言开发的报表工具,它提供了强大的报表设计和生成功能,能够满足各种报表生成需求。UReport2 支持多种数据源,包括关系数据库、...

    JavaScript的new date等日期函数在safari中遇到的坑

    总结来说,当我们使用JavaScript的new Date函数时,尤其是在Safari浏览器中,我们需要注意日期格式的问题。了解Safari的这一限制,并采取适当的转换措施,可以避免在实际应用中遇到日期解析错误的问题。同时,这也是...

    C_获取当前时间的各种格式

    - **`dt.ToLongDateString().ToString()`**:返回当前时间的长日期格式(如“2005年11月5日”)。 示例: ```csharp string longDate = DateTime.Now.ToLongDateString().ToString(); // 输出类似于 "2005年11...

    小程序兼容安卓和IOS数据处理问题及坑

    例如,在iOS中使用`new Date("2018-08-08")`会导致`NaN`错误,因为iOS仅支持`new Date("2018/08/08")`这样的日期格式。 ```javascript // Android兼容的日期格式 var startDate = new Date("2018-08-08"); // 正确 ...

    mysql转oracle要注意的几项

    例如,将字符串转换为日期格式在Oracle中通常使用`TO_DATE`函数。给定文件中提到的`TO_DATE('2012-01-01', 'yyyy-mm-dd')`展示了如何将字符串'2012-01-01'转换为日期类型。 ```sql SELECT * FROM t1 WHERE acquisi_...

    Spring MVC自定义日期类型转换器实例详解

     WEB层采用Spring MVC框架,将查询到的数据传递给APP端或客户端,这没啥,但是坑的是实体类中有日期类型的属性,但是你必须提前格式化好之后返回给它们。说真的,以前真没这样做过,之前都是一口气查询到数据,然后...

    summarize:学习总结 资料室 实验室

    日期格式化 {日期格式化yyyy-MM-dd HH:mm:ss} 生成二维码 {日期格式化yyyy-MM-dd HH:mm:ss} redux {redux实践} 其它项目Demo angular1 豆瓣电影 angular1 Todos 图片居中适配案例 {手机, pc自适应小案例}

    go json转换实践中遇到的坑

    如果你的 JSON 数据中日期时间格式不一致,可以自定义时间格式的解析,或者使用第三方库如 `time.Parse()` 进行解析。 总之,在 Go 中处理 JSON 转换时,需要注意整数类型被转换为浮点数的问题,以及时间类型的正确...

    解决iView中时间控件选择的时间总是少一天的问题

    在描述中提到,开发者最初是用`v-model`属性来绑定时间控件的值,这种情况下,时间可能会被转换为UTC格式,从而在某些时区中导致日期减少一天。为了解决这个问题,我们需要改变获取时间的策略,利用`@on-change`事件...

    日常养护工程绿化养护施工月报格式.doc

    文档标题和描述中提到的是一个关于“日常养护工程绿化养护施工月报”的标准格式,用于记录和汇报一个月内绿化养护工作的各项详情。这份月报在实际的园林绿化维护管理中非常关键,它提供了对工程进度、工程质量、人员...

    解析JS在获取当前月的最后一天遇到的坑

    在JavaScript中,处理日期是一项常见的任务,特别是在计算和格式化日期时。本文主要讨论了如何正确获取当前月的最后一天,以及在这个过程中可能遇到的问题。首先,一个简单的技巧是,如果你想获取上个月的最后一天,...

    程联ۥ系函格式精选.doc

    联络函中多次提到按照电梯土建图要求进行施工,包括预留孔洞尺寸、呼梯盒的位置、底坑的防水处理、门套尺寸校正等,强调了土建工程与电梯安装的紧密配合。 3. **电梯调试与验收**:电梯安装完毕后,需要进行调试并...

    Android Json解析之org.json

    当碰到日期时间的时候,你可能会遇到坑,需要格式化一下日期时间格式。 本文介绍org.json这种不需要导入任何包的解析方式,不管Json多少层,如探囊取物。 详见:...

    yii gridview实现时间段筛选功能

    yii gridview功能强大,但是时间筛选比较麻烦,与数据库的存储格式有关,本文的时间格式是date类型 那么问题来了,yii只提供关于时间的text搜索格式,就是只能查找精确...3.坑:选择日期后,输入框没有光标,需要二次点

Global site tag (gtag.js) - Google Analytics