1.时区(TimeZone)和地区(Locale)
时区:这个名称有点不准确,其实应该叫“时间体系和偏移量”。
时间体系有很多种,古时中国人喜欢用皇帝名+登基时间来表示时间,这也是一种时间体系。现在比较常用的时间体系是GMT和UTC。GMT也就是格林威治时间,也叫格林尼治时间,从1970-01-01 00:00:00开始计算。UTC是在GMT基础上设计的,两者误差很小,作为凡人可以忽略。如果是要求很高的军工行业,则请查阅其他资料吧。
偏移量主要是针对GMT和UTC体系把世界划分为24个区而设计的。常见的东八区“GMT+8”。
地区:所属地区。在中国一个星期的第一天是星期一,在西方第一天是星期日,这个小细节不注意可能会导致计算星期的时候出问题。
- // 全局显示定义最省事安全
- Locale.setDefault(Locale.ENGLISH);//推荐用英语地区的算法
- TimeZone.setDefault(TimeZone.getTimeZone("GMT+8"));
- // 局部定义
- Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT+8"), Locale.ENGLISH);
// 全局显示定义最省事安全
Locale.setDefault(Locale.ENGLISH);//推荐用英语地区的算法
TimeZone.setDefault(TimeZone.getTimeZone("GMT+8"));
// 局部定义
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT+8"), Locale.ENGLISH);
2.初始值
代码如下,值得指出的是由于我们的时区设置是GMT+8,所以打印格林威治时间得到的是1970-01-01 08:00:00。
- Calendar cal = Calendar.getInstance();//得到当前时间
- cal.setTimeInMillis(0);//转换成格林威治时间
Calendar cal = Calendar.getInstance();//得到当前时间
cal.setTimeInMillis(0);//转换成格林威治时间
3.获取值
- cal.get(Calendar.YEAR);//年
- cal.get(Calendar.MONTH) + 1;//月(脑残要+1)
- cal.get(Calendar.DATE);//日
- cal.get(Calendar.HOUR_OF_DAY);//时
- cal.get(Calendar.MINUTE);//分
- cal.get(Calendar.SECOND);//秒
- cal.get(Calendar.DAY_OF_WEEK);//星期(<span style="font-family: Arial, Helvetica, sans-serif;">Locale.ENGLISH情况下,</span><span style="font-family: Arial, Helvetica, sans-serif;">周日是1,剩下自己推算)</span>
cal.get(Calendar.YEAR);//年
cal.get(Calendar.MONTH) + 1;//月(脑残要+1)
cal.get(Calendar.DATE);//日
cal.get(Calendar.HOUR_OF_DAY);//时
cal.get(Calendar.MINUTE);//分
cal.get(Calendar.SECOND);//秒
cal.get(Calendar.DAY_OF_WEEK);//星期(Locale.ENGLISH情况下,周日是1,剩下自己推算)
如果拿时间不是为了计算而是展示出来,肯定用SimpleDateFormart了,模式为yyyy-MM-dd HH:mm:ss
4.设置值
- cal.set(2013, 5, 4, 13, 44, 51);//年月日时分秒(月份0代表1月)
- cal.set(Calendar.YEAR, 2014);//年
- cal.set(Calendar.MONTH, 7);//月(月份0代表1月)
- cal.set(Calendar.DATE, 11);//日
- cal.set(Calendar.HOUR_OF_DAY, 15);//时
- cal.set(Calendar.MINUTE, 33);//分
- cal.set(Calendar.SECOND, 32);//秒
- //周比较含糊免了
cal.set(2013, 5, 4, 13, 44, 51);//年月日时分秒(月份0代表1月)
cal.set(Calendar.YEAR, 2014);//年
cal.set(Calendar.MONTH, 7);//月(月份0代表1月)
cal.set(Calendar.DATE, 11);//日
cal.set(Calendar.HOUR_OF_DAY, 15);//时
cal.set(Calendar.MINUTE, 33);//分
cal.set(Calendar.SECOND, 32);//秒
//周比较含糊免了
5.运算值
- cal.add(Calendar.YEAR, 1);//年
- cal.add(Calendar.MONTH, 1);//月
- cal.add(Calendar.DATE, 1);//日
- cal.add(Calendar.HOUR_OF_DAY, -1);//时
- cal.add(Calendar.MINUTE, 1);//分
- cal.add(Calendar.SECOND, 1);//秒
- cal.add(Calendar.DATE, 7);//周
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Calendar获取年月日,时分秒,等等的运用
1.问题描述
使用calendar来代替Date
2.方式:
Calendar获取年月日,时分秒,这一周的第几天,这一个月的第几天,日期比较,日期毫秒数,等等的运用。。。。
3.代码:
-
- import java.util.Calendar;
- /**
- * Calendar的简单使用
- * @author _jon
- *
- */
- public class TestCalendar {
- public static void main(String[] args) {
- /**
- * 获取的calendar实例的时间是当前时间
- */
- //得到Calendar的实例
- Calendar calendar = Calendar.getInstance();
- /**
- * 获取 年 ,月 ,日
- */
- System.out.println(calendar.get(Calendar.YEAR));
- //默认从0-11
- System.out.println(calendar.get(Calendar.MONTH));
- System.out.println(calendar.get(Calendar.DATE));
- /**
- * 获取时分秒
- */
- //24小时制
- System.out.println(calendar.get(Calendar.HOUR_OF_DAY));
- //12小时制
- //System.out.println(calendar.get(Calendar.HOUR));
- System.out.println(calendar.get(Calendar.MINUTE));
- System.out.println(calendar.get(Calendar.SECOND));
- /**
- * 这一年的第几天,这个月的第几天,这周的第几天
- */
- System.out.println(calendar.get(Calendar.DAY_OF_YEAR));
- System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
- System.out.println(calendar.get(Calendar.DAY_OF_WEEK));
- /**
- * 得到时间,Fri Aug 19 14:33:03 CST 2016
- * 得到本周第一天
- * 得到时间的毫秒数
- */
- System.out.println(calendar.getTime());
- System.out.println(calendar.getFirstDayOfWeek());
- System.out.println(calendar.getTimeInMillis());
- // System.out.println(calendar.compareTo(anotherCalendar));
- }
- }
- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
在今年7月份时候 写了一篇关于 "JS日历控件" 的文章 , 当时仅仅支持 年月日 的日历控件,如今优化例如以下:
当我切换到其它年份的时候,我点击 "今天"button 就能够返回当前的年月份。
targetCls | 渲染日历的class 默觉得空 |
beginyear | 日历的開始年份 默觉得1949 |
endyear | 日历的结束年份 默觉得2049 |
date | new Date() 默认日期 也能够在input框自己自己定义值 |
type | 日期格式。眼下支持三种格式: 1. "yyyy-mm-dd" 年月日 2. "yyyy-mm-dd HH:MM:SS" 年月日时分秒。 3. "yyyy-mm-dd HH:MM" 年月日时分 |
separator | 日期的分隔符 默觉得 - |
wday | 0, 设置周的第一天,默认从第一天開始 |
language | 对象: { year: "年", month: "月", monthList: ["1","2","3","4","5","6","7","8","9","10","11","12"], weekList: ["日","一","二","三","四","五","六"]} |
比方例如以下demo年月日的示意图例如以下:
时分秒的demo例如以下:
时分的demo例如以下:
HTML代码例如以下:
1
2
3
4
5
6
|
<
p
>
開始时间:
<
input
name="mydate" type="text" class="input_cxcalendar" style="width:200px;">
结束时间:
<
input
name="mydate2" type="text" class="input_cxcalendar" style="width:200px;" >
</
p
>
|
当然在头部要引入例如以下JS文件:
<script src="jquery-1.9.1.js"></script>
<script src="calendar.js"></script>
依赖于jquery框架。
后面的是日历控件JS
初始化方式例如以下:
1
2
3
4
5
6
7
8
9
10
|
<script>
$(
'.input_cxcalendar'
).each(
function
(){
var
a =
new
Calendar({
targetCls: $(
this
),
type:
'yyyy-mm-dd'
或者 ‘yyyy-mm-dd HH:MM:SS’ 或者 ‘yyyy-mm-dd HH:MM’;
},
function
(val){
console.log(val);
// 回调函数 当前选中的值
});
});
</script>
|
代码分析:
1. 页面初始化时。调用init()方法,生成日历控件代码,例如以下所看到的:
2. 初始化完毕后,调用渲染日历面板的函数 _renderCalendarPanel(),例如以下所看到的:\
3. 在_renderCalendarPanel()函数做一些推断例如以下:
4. 在第三步定义了每月的天数 self.month_day; 定义了周末(周六,周日)的位置是第几个,例如以下所看到的:
接着代码例如以下:
例如以下设置wday = 2
_dayNumOfMonth函数的意思例如以下:
5. 以下我们接着来看看 通过春节 月份来渲染天数 _renderBody()函数,例如以下:
例如以下所看到的
接着:
等。