日期格式转换

文本字符串的处理,数字格式是第一常见的,日期格式就是第二常见的了。日期的格式转换,主要是四种:Date转String、String转Date、Date转Calendar、Calendar转Date。
  Date转String,先设置要转换的日期格式,再做格式化,代码如下:

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");  //格式中间可以再插入/、-、:等日期时间分隔符
Date date = new Date();
String str = sdf.format(date);
System.out.println("date="+date+", str="+str);

  String转Date

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
String str = "20151124093336";
Date date = sdf.parse(str);
System.out.println("date="+date+", str="+str);

  Date转Calendar

Calendar calendar = Calendar.getInstance();
Date date = new Date();
calendar.setTime(date);
System.out.println("date="+date+", calendar="+calendar);

  Calendar转Date

Calendar calendar = Calendar.getInstance();
Date date = calendar.getTime();
System.out.println("date="+date+", calendar="+calendar);

日期的运算

java的Date类型无法直接做加减操作,比如当前时间加一个月,或者减10天,Date类型是处理不了的,必须要借助于Calendar类型。先把Date类型转换为Calendar类型,然后对Calendar进行加减运算,最后再把Calendar类型转换为Date类型。代码如下:

import java.util.Calendar;
import java.util.Date;public class AddDate {public static Date addDate(Date date, int dayNum) {Calendar calendar = Calendar.getInstance();calendar.setTime(date);calendar.add(Calendar.DAY_OF_YEAR, dayNum);return calendar.getTime();}public static Date addMonth(Date date, int monthNum) {Calendar calendar = Calendar.getInstance();calendar.setTime(date);calendar.add(Calendar.MONTH, monthNum);return calendar.getTime();}public static void main(String[] arg) {Date old_date = new Date();Date add_day = addDate(old_date, -10);Date add_month = addMonth(old_date, 1);System.out.println("old_date=" + old_date + ", add_day=" + add_day + ", add_month=" + add_month);}
}

一个简单的日历

都说学以致用,博主初学android时,就是拿日历app来练手。日历的需求很简单,要有公历日期、农历日期,最好还有常见节日,当然若有二十四节气就更好了。
公历日期有规律,1、3、5、7、8、10、12这几个月有31天,4、6、9、11这几个月有30天,2月份平时28天,闰年有29天。闰年的判断规则也简单,能被4整除的年份是闰年,当然有例外能被100整除但不能被400整除的是平年,能被400整除的是闰年。另外判断某天是星期几,倒是有点麻烦,先要把它转成Calendar类型,然后根据Calendar.DAY_OF_WEEK取到一周中的第几天,但java中一周中的第一天是周日,按照我们的习惯第一天是周一,所以又得做个转换,代码如下:

 public static int getWeekday(Date date){int dayOfWeek = 0;Calendar cal = Calendar.getInstance();cal.setTime(date);dayOfWeek = cal.get(Calendar.DAY_OF_WEEK)-1;if (dayOfWeek == 0) {dayOfWeek = 7;}return dayOfWeek;}

农历日期算起来有点麻烦,我就直接找了网上的开源代码。二十四节气其实是判断太阳在黄道上的运行轨迹,这个很高深,我也是找了网上大牛写的源码。

有了公历日期和农历日期,计算节日就方便了。公历节日多是某月某日,而农历节日多是某月初几或十五,直接套日期便是,还有就是二十四节气里的节日如清明和冬至等等。有几个西方节日比较特殊,要算某月的第几个星期几,比如母亲节是五月的第二个星期日,父亲节是六月的第三个星期日,感恩节是七月的第四个星期四等等,这里给出这几个节日的代码:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;public class Main {public static int getWeekday(Date date) {int dayOfWeek = 0;Calendar cal = Calendar.getInstance();cal.setTime(date);dayOfWeek = cal.get(Calendar.DAY_OF_WEEK) - 1;if (dayOfWeek == 0) {dayOfWeek = 7;}return dayOfWeek;}final static String[] weekHoliday = new String[] { "0527 母亲节", "0637 父亲节", "0744 感恩节" };public static void main(String[] arg) throws ParseException {SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");int year = 2015;for (int month = 1; month <= 12; month++) {int day_num = 31;if (month == 2) {day_num = 28;} else if (month == 4 || month == 6 || month == 9 || month == 11) {day_num = 30;}for (int day = 1; day <= day_num; day++) {for (int k = 0; k < weekHoliday.length; k++) {int weeknum = (day - 1) / 7;if (day - weeknum * 7 > 0) {weeknum++;}Date date = sdf.parse(String.format("%d%02d%02d", year, month, day));// 返回公历节假日名称String wd = weekHoliday[k].split(" ")[0];// 节假日的日期String wdv = weekHoliday[k].split(" ")[1];// 节假日的名称String wmd = String.format("%02d%d%d", month, weeknum, getWeekday(date));if (wd.equals(wmd)) {System.out.printf("%d年%d月%d日是%s\n", year, month, day, wdv);}}}}}
}

点击这里下载本文实现的日历源码

Android开发笔记(五)日期的处理相关推荐

  1. android开发笔记之日期显示格式

    日期特定的显示方式 做订单时,客户经常要求在特定界面,日期要按什么样的格式显示.比如launcher界面,锁屏界面,各个ui.真是一会一个需求. 日期显示的格式 在设置-日期和时间-有一个日期格式的选 ...

  2. Android开发笔记(一百七十五)利用Room简化数据库操作

    虽然Android提供了数据库帮助器,但是开发者在进行数据库编程时仍有诸多不便,比如每次增加一张新表,开发者都得手工实现以下代码逻辑: 1.重写数据库帮助器的onCreate方法,添加该表的建表语句: ...

  3. Android开发笔记(一百六十五)利用红外发射遥控电器

    红外遥控是一种无线控制技术,它具有功耗小.成本低.易实现等诸多优点,因而被各种电子设备特别是家用电器广泛采用,像日常生活中的电视遥控器.空调遥控器等等基本都采用红外遥控技术. 不过遥控器并不都是红外遥 ...

  4. Android开发笔记(一百五十四)OpenGL的画笔工具GL10

    上一篇文章介绍了OpenGL绘制三维图形的流程,其实没有传说中的那么玄乎,只要放平常心把它当作一个普通控件就好了,接下来继续介绍OpenGL具体的绘图操作,这项工作得靠三维图形的画笔GL10来完成了. ...

  5. Android开发笔记(一百三十五)应用栏布局AppBarLayout

    应用栏布局AppBarLayout Android5.0推出工具栏Toolbar用来替代ActionBar,灵活性和易用性大大增强,有关Toolbar的详细介绍参见< Android开发笔记(一 ...

  6. Android开发笔记(一百二十五)自定义视频播放器

    视频播放方式 在Android中播放视频的方式有两种: 1.使用MediaPlayer结合SurfaceView进行播放.其中通过SurfaceView显示视频的画面,通过MediaPlayer来设置 ...

  7. Android开发笔记(一百零五)社会化分享SDK

    社会化分享 社会化分享,指的是用户通过互联网这个媒介,把文本/图片/多媒体信息分享到该用户的交际圈,从而加快信息传播的行为.对于app来说,网络社区虽多,但用户量足够大的就那几个,所以app的社会化分 ...

  8. Android开发笔记(九十五)自定义Drawable

    Drawable Bitmap是Android对图像的定义描述,而Drawable则是对图像的展现描述,在View视图中显示图像都是通过Drawable来实现的.其中有关Bitmap的介绍参见< ...

  9. Android开发笔记(五十七)录像录音与播放

    媒体录制MediaRecorder MediaRecorder是Android自带的录制工具,通过操纵摄像头和麦克风完成媒体录制,既可录制视频,也可单独录制音频.其中对摄像头Camera的介绍参见&l ...

  10. Android开发笔记(五十四)数据共享接口ContentProvider

    ContentProvider 前面几节介绍了进程间通信的几种方式,包括消息包级别的Messenger.接口调用级别的AIDL.启动页面/服务级别的Notification,还有就是本节这个数据库级别 ...

最新文章

  1. ceph-bluestore-tool基本使用
  2. Thread.sleep(0) 有什么用?
  3. 为iPhone6 设计自适应布局(一)
  4. 【卷积神经网络结构专题】ResNet及其变体的结构梳理、有效性分析
  5. 压力测试后,BCH采用增加
  6. Bootstrap4 glyphicon 移除图标 glyphicon fonts-faces 解决方案
  7. promise-async-await
  8. ASP.NET MVC应用程序展示RDLC报表
  9. 用户界面设计的一些方法和基本原则
  10. VB用API实现各种对话框(总结)(转载)
  11. Win11系统显示你的账户已被停用怎么办
  12. 京东公布618第一小时战报:成交金额同比增长65%
  13. 带有毫秒 转换日期_【Java学习笔记(七)】之日期类的介绍
  14. LeetCode(985)——查询后的偶数和(JavaScript)
  15. Python基础篇【第六篇】:函数补充
  16. ggthemes包:丰富ggplot2的表现力
  17. 20110614 开机脚本,统一管理员密码,exe,布线
  18. 【学习框架】jeeSite 【maven项目】导入后转成web项目 【转载加原创】
  19. virtualbox vm 虚拟机 迁移
  20. 计算机里没有硬盘 右下角有图标,电脑右下角显示硬盘图标怎么去掉<br?电脑 – 手机爱问...

热门文章

  1. win10蓝牙怎么开_摩托罗拉对讲机蓝牙写频方法
  2. uniapp浏览pdf文件
  3. python for ArcGIS 绘制沈阳市板块地图
  4. 联想笔记本免费WiFi上网详解
  5. 为什么qq相册显示服务器数据错误,玩qq空间常遇到的问题及解决办法_qq空间
  6. python工业机器人_工业机器人编程语言汇总!
  7. html改excel,怎么把html文件转成excel:html表格如何转换excel
  8. 正则表达式最好的书籍_正则表达式的最佳做法
  9. 用C#通过正则表达式截取字符串中符合条件的子字符串
  10. 静态库和动态库运行时间的区别