java中用SimpleDateFormat 怎么把 2015-04-20T11:12:00.0+08:00 解析成 Date Calendar
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");//yyyy-MM-dd'T'HH:mm:ss Date date1 = null; try { date1 = formatter.parse("2018-11-07T18:37:42.803+08:00"); System.out.println("先 解析成Data="+date1);//解析Data=Wed Nov 07 18:37:42 CST 2018 } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String sDate=sdf.format(date1);//转换指定2格式=2018-11-07 18:37:42 System.out.println(sDate);
package com.test; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; import org.junit.Test; public class TestDate { @Test public void testSimpleDateFormat(){ DateFormat dateFormat =new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); Date date = new Date(); System.out.println(dateFormat.format(date)); String dateStr = "1990-12-12 12:12:12"; Date date2 = null; try { date2 = dateFormat.parse(dateStr); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(date2); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");//yyyy-MM-dd'T'HH:mm:ss Date date1 = null; try { date1 = formatter.parse("2018-11-07T18:37:42.803+08:00"); System.out.println("先 解析成Data="+date1);//解析Data=Wed Nov 07 18:37:42 CST 2018 } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String sDate=sdf.format(date1);//转换指定2格式=2018-11-07 18:37:42 System.out.println(sDate); String timeStr = "2017-02-23T00:00:00.0+08:00"; SimpleDateFormat formatter1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX"); try { Date date11 = formatter1.parse(timeStr); System.out.println("转换为日期"+date11); System.out.println("转换为日期获取时间戳"+date11.getTime()); System.out.println("转换为日期获取时间戳减两小时"+(date11.getTime()-7200000)); System.out.println("转换为日期获取时间戳减两小时的日期格式"+new Date(date11.getTime()-7200000)); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
用法: SimpleDateFormat sdf = new SimpleDateFormat( " yyyy-MM-dd HH:mm:ss " );
这一行最重要,它确立了转换的格式,yyyy是完整的公元年,MM是月份,dd是日期,至于HH:mm:ss
就不需要我再解释了吧!
PS:为什么有的格式大写,有的格式小写,那是怕避免混淆,例如MM是月份,mm是分;HH是24小
时制,而hh是12小时制。
1.字符串转日期
2008-07-10 19:20:00 要把它转成日期,可以用 Date date = sdf.parse( " 2008-07-10 19:20:00 " );
2.日期转字符串
假如把今天的日期转成字符串可用 String str = sdf.format(new Date());
这个字符串内容的格式类似2008-07-10 19:20:00。
透过这个API我们便可以随心所欲的将日期转成我们想要的字符串格式,例如希望将日期输出成2008
年7月10日,我们可以这么写:
SimpleDateFormat sdf = new SimpleDateFormat( " yyyy年MM月dd日 " );
String str = sdf.format(new Date());
str便会依照我们设定的格式输出了
Calendar
/** * 获取两个日期相差的月数 */ public static int getMonthDiff(Date d1, Date d2) { Calendar c1 = Calendar.getInstance(); Calendar c2 = Calendar.getInstance(); c1.setTime(d1); c2.setTime(d2); int year1 = c1.get(Calendar.YEAR); int year2 = c2.get(Calendar.YEAR); int month1 = c1.get(Calendar.MONTH); int month2 = c2.get(Calendar.MONTH); int day1 = c1.get(Calendar.DAY_OF_MONTH); int day2 = c2.get(Calendar.DAY_OF_MONTH); // 获取年的差值 int yearInterval = year1 - year2; // 如果 d1的 月-日 小于 d2的 月-日 那么 yearInterval-- 这样就得到了相差的年数 if (month1 < month2 || month1 == month2 && day1 < day2) yearInterval--; // 获取月数差值 int monthInterval = (month1 + 12) - month2; if (day1 < day2) monthInterval--; monthInterval %= 12; int monthsDiff = Math.abs(yearInterval * 12 + monthInterval); return monthsDiff; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通