Scala Date 工具方法

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
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
import java.util.Date

import org.joda.time.{DateTime, Instant}
import org.joda.time.format.{DateTimeFormat, DateTimeFormatter}

object DateUtil {
val DATE_FORMAT: DateTimeFormatter = DateTimeFormat.forPattern("yyyy-MM-dd")
val TIME_FORMAT: DateTimeFormatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss")
val DATE_KEY_FORMAT: DateTimeFormatter = DateTimeFormat.forPattern("yyyyMMdd")
val TIME_MINUTE_FORMAT: DateTimeFormatter = DateTimeFormat.forPattern("yyyyMMddHHmm")


/**
* 获取昨天的, 格式: yyyy-MM-dd
*
* @return 昨天的日期
*/
def getYesterdayDate: String = {
DateTime.now() .minusDays(1).toString(DATE_FORMAT)
}

/**
* 获取当天日期, 格式: yyyy-MM-dd
*
* @return 当天日期
*/
def getTodayDate: String = {
DateTime.now().toString(DATE_FORMAT)
}

/**
* 获取距当天 N 天时的日期 格式: yyyy-MM-dd
*
* @param n : 当天为 0,前一天为 1, 后一天为 -1
* @return yyyy-MM-dd
*/
def getDate(n: Int): String = {
DateTime.now().minusDays(n).toString(DATE_FORMAT)
}

/**
* 获取日期时间 格式: yyyy-MM-dd
*
* @param yesterday : 需要计算的日期
* @param n : 当天为 0,前一天为 1, 后一天为 -1
* @return yyyy-MM-dd
*/
def getOneDate(yesterday: String, n: Int): String = {
DateTime.parse(yesterday).minusDays(n).toString(DATE_FORMAT)
}

def getNowTime: String = {
DateTime.now().toString(TIME_FORMAT)
}

/**
* 格式化日期, 格式: yyyy-MM-dd
*
* @param date Date对象
* @return 格式化后的日期
*/
def formatDate(date: Date): String = {
new DateTime(date).toString(DATE_FORMAT)
}

/**
* 格式化时间, 格式: yyyy-MM-dd HH:mm:ss
*
* @param date Date对象
* @return 格式化后的时间
*/
def formatTime(date: Date): String = {
new DateTime(date).toString(TIME_FORMAT)
}

/**
* 格式化日期key, 格式: yyyyMMdd
*
* @param date : Date对象, Sat Sep 07 03:02:01 CST 2019
* @return yyyyMMdd
*/
def formatDateKey(date: Date): String = {
new DateTime(date).toString(DATE_KEY_FORMAT)
}

/**
* 格式化日期key, 格式: yyyyMMdd
*
* @param date : time String, yyyy-MM-dd HH:mm:ss
* @return yyyyMMdd
*/
def formatDateKey(date: String): Date = {
DATE_KEY_FORMAT.parseDateTime(date).toDate
}

/**
* 格式化日期key, 格式: yyyyMMdd
*
* @param date : time String, yyyy-MM-dd HH:mm:ss
* @return yyyyMMdd
*/
def dateToTimestamp(date: String): Long = {
TIME_FORMAT.parseDateTime(date).getMillis
}

/**
* 格式化日期为0点, 格式: yyyy-MM-dd 00:00:00
*
* @param date : time String, yyyy-MM-dd HH:mm:ss
* @return yyyy-MM-dd 00:00:00
*/
def formatTimeZone(date: String): String = {
TIME_FORMAT.parseDateTime(date).toString("yyyy-MM-dd 00:00:00")
}

/**
* 时间戳转日期, 格式: yyyy-MM-dd
*
* @param timestamp : 时间戳, Long
* @return yyyy-MM-dd
*/
def timestampToDate(timestamp: Long): String = {
new DateTime(timestamp).toString(DATE_FORMAT)
}

/**
* 时间戳转time, 格式: yyyy-MM-dd HH:mm:ss
*
* @param timestamp : 时间戳, Long, 13 位
* @return yyyy-MM-dd HH:mm:ss
*/
def timestampToTime(timestamp: Long): String = {
new DateTime(timestamp).toString(TIME_FORMAT)
}

/**
* 时间戳转指定格式time, 格式: 自定义
*
* @param timestamp: 时间戳, Long, 13 位
* @param pattern: 格式化格式,如: yyyy-MM-dd
* @return 自定义
*/
def timestampToTime(timestamp: Long, pattern: String): String = {
new DateTime(timestamp).toString(pattern)
}

/**
* 通过时间戳获取小时, 格式: HH
*
* @param timestamp: 时间戳, Long, 13 位
* @return 小时, Int
*/
def getHour(timestamp: Long): Int = {
new DateTime(timestamp).hourOfDay().getAsString.toInt
}

/**
* 通过时间戳获取分钟, 格式: mm
*
* @param timestamp: 时间戳, Long, 13 位
* @return 分钟, Int
*/
def getMinute(timestamp: Long): Int = {
new DateTime(timestamp).millisOfSecond().getAsString.toInt
}

/**
* 通过时间戳获取秒, 格式: ss
*
* @param timestamp: 时间戳, Long, 13 位
* @return 秒, Int
*/
def getSecond(timestamp: Long): Int = {
new DateTime(timestamp).secondOfMinute().getAsString.toInt
}

/**
* 将时间转换为日期格式,格式化到月
*
* @param date yyyy-MM-dd HH:mm:ss
* @return yyyy-MM
*/
def formatDateToMonth(date: String): String = {
TIME_FORMAT.parseDateTime(date).toString("yyyy-MM")
}