1
1
# This file is a part of Julia. License is MIT: http://julialang.org/license
2
2
3
- # TODO : optimize this
4
- function Base. string (dt:: DateTime )
5
- y,m,d = yearmonthday (days (dt))
6
- h,mi,s = hour (dt),minute (dt),second (dt)
7
- yy = y < 0 ? @sprintf (" %05i" ,y) : lpad (y,4 ," 0" )
8
- mm = lpad (m,2 ," 0" )
9
- dd = lpad (d,2 ," 0" )
10
- hh = lpad (h,2 ," 0" )
11
- mii = lpad (mi,2 ," 0" )
12
- ss = lpad (s,2 ," 0" )
13
- ms = millisecond (dt) == 0 ? " " : string (millisecond (dt)/ 1000.0 )[2 : end ]
14
- return " $yy -$mm -$(dd) T$hh :$mii :$ss$(ms) "
15
- end
3
+ Base. string (dt:: DateTime ) = format (dt)
16
4
Base. show (io:: IO ,x:: DateTime ) = print (io,string (x))
17
- function Base. string (dt:: Date )
18
- y,m,d = yearmonthday (value (dt))
19
- yy = y < 0 ? @sprintf (" %05i" ,y) : lpad (y,4 ," 0" )
20
- mm = lpad (m,2 ," 0" )
21
- dd = lpad (d,2 ," 0" )
22
- return " $yy -$mm -$dd "
23
- end
5
+ Base. string (dt:: Date ) = format (dt)
24
6
Base. show (io:: IO ,x:: Date ) = print (io,string (x))
25
7
26
8
# ## Parsing
@@ -49,12 +31,18 @@ immutable FixedWidthSlot{T<:Any} <: Slot{T}
49
31
width:: Int
50
32
end
51
33
52
- immutable DateFormat
34
+ abstract AbstractDateFormat
35
+
36
+ immutable DateFormat <: AbstractDateFormat
53
37
slots:: Array{Slot,1}
54
38
prefix:: AbstractString # optional transition from the start of a string to the 1st slot
55
39
locale:: AbstractString
56
40
end
57
41
42
+ immutable FastDateFormat{S} <: AbstractDateFormat
43
+ end
44
+
45
+
58
46
abstract DayOfWeekSlot
59
47
60
48
# Slot rules translate letters into types. Note that
@@ -230,10 +218,14 @@ function format(dt::TimeType,df::DateFormat)
230
218
end
231
219
232
220
# UI
233
- const ISODateTimeFormat = DateFormat ( " yyyy-mm-dd \\ THH:MM:SS.s " )
234
- const ISODateFormat = DateFormat ( " yyyy-mm-dd " )
221
+ const ISODateTimeFormat = FastDateFormat {:ISODateTime} ( )
222
+ const ISODateFormat = FastDateFormat {:ISODate} ( )
235
223
const RFC1123Format = DateFormat (" e, dd u yyyy HH:MM:SS" )
236
224
225
+ format (dt:: DateTime ) = format (dt, ISODateTimeFormat)
226
+ format (dt:: Date ) = format (dt, ISODateFormat)
227
+
228
+
237
229
"""
238
230
DateTime(dt::AbstractString, format::AbstractString; locale="english") -> DateTime
239
231
@@ -265,14 +257,15 @@ backslash. The date "1995y01m" would have the format "y\\ym\\m".
265
257
DateTime (dt:: AbstractString ,format:: AbstractString ;locale:: AbstractString = " english" ) = DateTime (dt,DateFormat (format,locale))
266
258
267
259
"""
268
- DateTime(dt::AbstractString, df::DateFormat ) -> DateTime
260
+ DateTime(dt::AbstractString, df::AbstractDateFormat ) -> DateTime
269
261
270
262
Construct a `DateTime` by parsing the `dt` date string following the pattern given in
271
263
the [`DateFormat`](@ref) object. Similar to
272
264
`DateTime(::AbstractString, ::AbstractString)` but more efficient when repeatedly parsing
273
265
similarly formatted date strings with a pre-created `DateFormat` object.
274
266
"""
275
- DateTime (dt:: AbstractString ,df:: DateFormat = ISODateTimeFormat) = DateTime (parse (dt,df)... )
267
+ DateTime (dt:: AbstractString ,df:: DateFormat ) = DateTime (parse (dt,df)... )
268
+ DateTime (dt:: AbstractString ) = DateTime (dt,ISODateTimeFormat)
276
269
277
270
"""
278
271
Date(dt::AbstractString, format::AbstractString; locale="english") -> Date
@@ -284,11 +277,12 @@ Construct a `Date` object by parsing a `dt` date string following the pattern gi
284
277
Date (dt:: AbstractString ,format:: AbstractString ;locale:: AbstractString = " english" ) = Date (dt,DateFormat (format,locale))
285
278
286
279
"""
287
- Date(dt::AbstractString, df::DateFormat ) -> Date
280
+ Date(dt::AbstractString, df::AbstractDateFormat ) -> Date
288
281
289
- Parse a date from a date string `dt` using a `DateFormat` object `df`.
282
+ Parse a date from a date string `dt` using format `df`.
290
283
"""
291
- Date (dt:: AbstractString ,df:: DateFormat = ISODateFormat) = Date (parse (dt,df)... )
284
+ Date (dt:: AbstractString ,df:: DateFormat ) = Date (parse (dt,df)... )
285
+ Date (str:: AbstractString ) = Date (str,ISODateFormat)
292
286
293
287
294
288
"""
@@ -328,18 +322,19 @@ format(dt::TimeType,f::AbstractString;locale::AbstractString="english") = format
328
322
329
323
# vectorized
330
324
DateTime {T<:AbstractString} (Y:: AbstractArray{T} ,format:: AbstractString ;locale:: AbstractString = " english" ) = DateTime (Y,DateFormat (format,locale))
331
- function DateTime {T<:AbstractString} (Y:: AbstractArray{T} ,df:: DateFormat = ISODateTimeFormat)
332
- return reshape (DateTime[DateTime (parse (y,df)... ) for y in Y], size (Y))
325
+
326
+ function DateTime {T<:AbstractString} (Y:: AbstractArray{T} ,df:: AbstractDateFormat = ISODateTimeFormat)
327
+ return reshape (DateTime[DateTime (y,df) for y in Y], size (Y))
333
328
end
334
329
Date {T<:AbstractString} (Y:: AbstractArray{T} ,format:: AbstractString ;locale:: AbstractString = " english" ) = Date (Y,DateFormat (format,locale))
335
- function Date {T<:AbstractString} (Y:: AbstractArray{T} ,df:: DateFormat = ISODateFormat)
336
- return reshape (Date[Date (parse ( y,df) ... ) for y in Y], size (Y))
330
+ function Date {T<:AbstractString} (Y:: AbstractArray{T} ,df:: AbstractDateFormat = ISODateFormat)
331
+ return reshape (Date[Date (y,df) for y in Y], size (Y))
337
332
end
338
333
339
334
format {T<:TimeType} (Y:: AbstractArray{T} ,format:: AbstractString ;locale:: AbstractString = " english" ) = Dates. format (Y,DateFormat (format,locale))
340
- function format (Y:: AbstractArray{Date} ,df:: DateFormat = ISODateFormat)
335
+ function format (Y:: AbstractArray{Date} ,df:: AbstractDateFormat = ISODateFormat)
341
336
return reshape ([Dates. format (y,df) for y in Y], size (Y))
342
337
end
343
- function format (Y:: AbstractArray{DateTime} ,df:: DateFormat = ISODateTimeFormat)
338
+ function format (Y:: AbstractArray{DateTime} ,df:: AbstractDateFormat = ISODateTimeFormat)
344
339
return reshape ([Dates. format (y,df) for y in Y], size (Y))
345
340
end
0 commit comments