国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

香港云服务器
服務器之家 - 編程語言 - JAVA教程 - Java中Calendar時間操作常用方法詳解

Java中Calendar時間操作常用方法詳解

2020-05-03 14:04Past_Future JAVA教程

這篇文章主要為大家詳細介紹了Java中Calendar時間操作常用方法,calendar中set方法和靜態屬性帶來的一些坑,感興趣的小伙伴們可以參考一下

本文實例為大家分享了Calendar時間操作常用方法,具體內容如下

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
package test;
 
 
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
 
 
/**
 * Date和Calendar常用方法,Date很多方法已經棄用,因此以Calendar為主
 *
 * @author tuzongxun123
 *
 */
public class DateAndCalendarTest {
 
 
public static void main(String[] args) {
// 直接用Date獲取當前系統時間,結果:Tue May 03 08:25:44 CST 2016
Date date = new Date();
 
 
// Date中的許多方法,例如獲取某年、某月、某日等,以及設置某年、某月、某日等都不再建議使用,
// 建議使用calendar的各種方法替代,因此便不做記錄
// 獲取指定日期的毫秒數,常用來比較兩個日期的大小。
date.getTime();
 
 
// 使用Calendar獲取當前系統時間,需要獲取Calendar對象后轉換成Date輸出
Calendar calendar = Calendar.getInstance();
 
 
// 這個方法相當于Date中的getTime,獲取當前時間的毫秒數
calendar.getTimeInMillis();
 
 
// 獲取指定日期所在周的第一天的日期,默認的一周的第一天是周日
calendar.getFirstDayOfWeek();
 
 
// 返回當前calendar日期所在的年,如2016
calendar.get(1);
 
 
// Calendar轉Date,輸出結果:Tue May 03 09:31:59 CST 2016
Date date2 = calendar.getTime();
System.out.println(date2);
 
 
// Calendar設置年、月、日,輸出結果:Mon Jun 03 09:31:59 CST 2013
// 相關常用重載方法:calendar.set(year, month, date, hourOfDay, minute);
// calendar.set(year, month, date, hourOfDay, minute, second);參數均為int
calendar.set(2013, 5, 3);
System.out.println(calendar.getTime());
 
 
// 使用Calendar設置年,輸出結果:Fri Jun 03 09:42:43 CST 2011
calendar.set(Calendar.YEAR, 2011);
System.out.println(calendar.getTime());
 
 
// 使用Calendar和數字設置月,注意月份從0開始,代表1月,輸出結果:Mon Jan 03 09:45:32 CST 2011
calendar.set(Calendar.MONTH, 0);
System.out.println(calendar.getTime());
 
 
// 使用Calendar和自帶常量設置月,注意月份從0開始,代表1月,輸出結果:Thu Feb 03 09:47:07 CST 2011
calendar.set(Calendar.MONTH, Calendar.FEBRUARY);
System.out.println(calendar.getTime());
 
 
// 使用Calendar和數字設置日,輸出結果:Sat Feb 05 09:48:25 CST 2011
// calendar.set(Calendar.DAY_OF_MONTH, 5)結果一樣;
calendar.set(Calendar.DATE, 5);
System.out.println(calendar.getTime());
 
 
// 設置小時
calendar.set(Calendar.HOUR, 15);
System.out.println(calendar.getTime());
 
 
// 根據毫秒數設置Calendar時間
calendar.setTimeInMillis(0);
 
 
// Date轉String,輸出結果:2016-05-03 09:25:29
String forDate = dateToString(new Date());
System.out.println(forDate);
 
 
// String轉Date,輸出結果:Thu Nov 12 13:23:11 CST 2015
Date strDate = stringToDate("2015-11-12 13:23:11");
System.out.println(strDate);
 
 
// Date轉Calendar,輸出結果:2015
Calendar calendar2 = dateToCalendar(strDate);
System.out.println(calendar2.get(1));
 
 
}
 
 
/**
* 把指定的date類型時間轉換為指定格式的字符串
*
* @author:tuzongxun
* @Title: dateToString
* @param @param date
* @return void
* @date May 3, 2016 9:09:25 AM
* @throws
*/
static String dateToString(Date date) {
String str = "yyyy-MM-dd hh:mm:ss";
SimpleDateFormat format = new SimpleDateFormat(str);
String dateFormat = format.format(date);
return dateFormat;
}
 
 
/**
* 把指定的日期格式的字符串轉換成Date類型
*
* @author:tuzongxun
* @Title: StringToDate
* @param @param string
* @return void
* @date May 3, 2016 9:16:38 AM
* @throws
*/
static Date stringToDate(String string) {
String str = "yyyy-MM-dd hh:mm:ss";
SimpleDateFormat format = new SimpleDateFormat(str);
Date date = new Date();
try {
date = format.parse(string);
} catch (Exception e) {
e.getStackTrace();
}
return date;
}
 
 
/**
* 把指定的date類型日期轉換成Calendar類型
*
* @author:tuzongxun
* @Title: dateToCalendar
* @param @param date
* @return void
* @date May 3, 2016 9:13:49 AM
* @throws
*/
static Calendar dateToCalendar(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar;
}
}

又有哪些坑吶?

坑在哪里:

在我之前接觸的一個項目中涉及到這么一項功能:每天00:00:00把某些數據移動到mongodb數據庫的另一個集合中,也就是關系型數據庫的表中。這個集合名是一個固定的名稱加上當前的兩個月前的日期所在的年和月份。

這個功能是在我接觸這個項目之前就已經存在,也就是之前的同事實現的功能,寫了一個java的定時任務。

那個同事如今已經不在我們公司了,但是最近卻發現這個功能有些問題,數據的移動并不像預計那樣,原本應該存在2月的數據卻出現在了1月的表中。

坑的根源:

mongodb相關的問題暫時歸我維護,這個問題也自然而然需要我來解決,于是便把他的代碼翻出來看了一遍。結果便發現了問題出在了calendar的相關方法上。

要轉移兩個月前的數據,首先要獲取兩個月前的日期,他的生成表名的相關代碼是這樣的:

?
1
2
3
4
5
6
7
8
9
10
private String getDataCollectionName() {
    Calendar calendar = Calendar.getInstance();
    try {
      calendar.set(Calendar.DATE, -day);
      return "alarm_" + ToolUtils.dateToFormatStrDate(calendar.getTime(), "yyyy_MM");
    } catch (Exception e) {
    logger.error("{}: data transformating failed,{}", this.getClass().getName(), e.getMessage());
    }
    return null;
 }

問題正是出在calendar的set方法上,包括后來的查詢數據使用的開始和結束時間,也一樣用的是calendar.set(Calendar.DATE, -day);

這個方法乍一看起來似乎就是設置日期為當前日期減去指定的天數,但是實際上結果并不是想象中的這樣得到兩個月前的日期(這里的day它定義的是60,也就是兩個月)。

填坑:

找到原因之后,我把這個方法進行了替換,把set改為了add,至于里邊的參數沒有去動,而結果證明這個方法才是真正能實現當前功能的,得到的結果也正是預想中的結果。

當然了,也可以不改方法的同時把參數略做改變,如calendar.set(Calendar.DATE, calendar.get(calendar.DATE)-day);

以上就是本文的全部內容,希望對大家掌握Calendar時間操作常用方法有所幫助。

延伸 · 閱讀

精彩推薦
438
主站蜘蛛池模板: 日本免费高清视频 | 国产激情一区二区三区 | 欧美日韩一区二区三区在线观看 | 国产成人黄色片 | 精品综合久久久 | 一区二区日韩精品 | www操com| 每日更新在线观看av | 亚洲国产精品久久 | 欧美综合婷婷 | 91av在线电影 | 乱视频在线观看 | 天堂精品一区二区三区 | 成人高清视频在线观看 | 一区二区国产在线观看 | zzzzyyyy精品国产 | 中文字幕在线观看 | 免费在线看黄 | 日本狠狠色 | 日韩在线观看视频一区二区三区 | 国产理论在线 | 天天色成人综合网 | 欧美日韩亚洲成人 | 99久久亚洲一区二区三区青草 | 亚洲福利一区二区 | 在线播放一区二区三区 | 久久国内| 亚洲va中文字幕 | 成人黄色短视频在线观看 | 国产精品综合久久 | 日韩毛片 | 亚洲精品久久久久久国产 | 国产精品自拍视频 | www.夜夜爽 | 在线视频se | 精品在线视频播放 | 久草成人网| 欧美日韩高清 | 成人av网站在线观看 | 国产一区二区久久 | 久久精品无码一区二区日韩av |