Now we compare the two kinds of formatting engines.
Engine
|
Formatter
Thread-safe?
|
Description
|
Example
|
Java
|
SimpleDateFormat
NO
|
Standard Java date implementation.
Provides lenient, error-prone and full-featured parsing and writing. It has
moderate speed and is generally a good choice unless you need to work with
large quantities of date/time fields. For advanced study please refer to Java SimpleDateFormat documentation.
|
yyyy-MM-dd HH:mm:ss
|
Joda
|
DateTimeFormat
DateTimeFormatter
YES
|
An improved third-party date
library. Joda is stricter on input data accuracy when parsing and does not
work well with time zones. It does, however, provide a 20-30% speed increase
compared to standard Java. For further reading please visit the project site
at http://joda-time.sourceforge.net).
Joda may be convenient for AS/400
machines.
On the other hand, Joda is unable
to read time zone expressed with any number of z letters and/or at least
three Z letters
in a pattern.
|
yyyy-MM-dd HH:mm:ss
|
****************************
Java Default:
****************************
1.1 Date Format Pattern Syntax (Java)
Letter
|
Date or Time Component
|
Presentation
|
Examples
|
G
|
Era designator
|
Text
|
AD
|
Y
|
Year
|
Year
|
1996; 96
|
M
|
Month in year
|
Month
|
July; Jul; VII; 07; 7
|
w
|
Week in year
|
Number
|
27
|
W
|
Week in month
|
Number
|
2
|
D
|
Day in year
|
Number
|
189
|
d
|
Day in month
|
Number
|
10
|
F
|
Day of week in month
|
Number
|
2
|
E
|
Day in week
|
Text
|
Tuesday; Tue
|
a
|
Am/pm marker
|
Text
|
PM
|
H
|
Hour in day (0-23)
|
Number
|
0
|
k
|
Hour in day (1-24)
|
Number
|
24
|
K
|
Hour in am/pm (0-11)
|
Number
|
0
|
h
|
Hour in am/pm (1-12)
|
Number
|
12
|
m
|
Minute in hour
|
Number
|
30
|
s
|
Second in minute
|
Number
|
55
|
S
|
Millisecond
|
Number
|
970
|
z
|
Time zone
|
General time zone
|
Pacific Standard Time; PST;
GMT-08:00
|
Z
|
Time zone
|
RFC 822 time zone
|
-0800
|
'
|
Escape for text/id
|
Delimiter
|
(none)
|
''
|
Single quote
|
Literal
|
'
|
The number of symbol letters you specify also determines the format. For example, if the "zz" pattern results in "PDT", then the "zzzz" pattern generates "Pacific Daylight Time". The following table summarizes these rules:
1.2 Rules for Date Format Usage (Java)
Presentation
|
Processing
|
Number of Pattern Letters
|
Form
|
Text
|
Formatting
|
1 - 3
|
short or abbreviated form, if one
exists
|
Text
|
Formatting
|
>= 4
|
full form
|
Text
|
Parsing
|
>= 1
|
both forms
|
Year
|
Formatting
|
2
|
truncated to 2 digits
|
Year
|
Formatting
|
1 or >= 3
|
interpreted as Number.
|
Year
|
Parsing
|
1
|
intepreted literally
|
Year
|
Parsing
|
2
|
interpreted relative to the
century within 80 years before or 20 years after the time when theSimpleDateFormat instance
is created
|
Year
|
Parsing
|
>= 3
|
intepreted literally
|
Month
|
Both
|
1-2
|
interpreted as a Number
|
Month
|
Parsing
|
>= 3
|
interpreted as Text (using Roman
numbers, abbreviated month name - if exists, or full month name)
|
Month
|
Formatting
|
3
|
interpreted as Text (using Roman
numbers, or abbreviated month name - if exists)
|
Month
|
Formatting
|
>= 4
|
interpreted as Text (full month
name)
|
Number
|
Formatting
|
minimum number of required digits
|
shorter numbers are padded with
zeros
|
Number
|
Parsing
|
number of pattern letters is
ignored (unless needed to separate two adjacent fields)
|
any form
|
General time zone
|
Both
|
1-3
|
short or abbreviated form, if has
a name. Otherwise, GMT offset value (GMT[sign][[0]0-23]:[00-59])
|
General time zone
|
Both
|
>= 4
|
full form, , if has a name.
Otherwise, GMT offset value (GMT[sign][[0]0-23]:[00-59])
|
General time zone
|
Parsing
|
>= 1
|
RFC 822 time zone form is allowed
|
RFC 822 time zone
|
Both
|
>= 1
|
RFC 822 4-digit time zone format
is used ([sign][0-23][00-59])
|
RFC 822 time zone
|
Parsing
|
>= 1
|
General time zone form is allowed
|
Examples:
1.3 Date and Time Format Patterns and Results (Java)
Date and Time Pattern
|
Result
|
"yyyy.MM.dd G 'at' HH:mm:ss
z"
|
2001.07.04 AD at 12:08:56 PDT
|
"EEE, MMM d, ''yy"
|
Wed, Jul 4, '01
|
"h:mm a"
|
12:08 PM
|
"hh 'o''clock' a, zzzz"
|
12 o'clock PM, Pacific Daylight
Time
|
"K:mm a, z"
|
0:08 PM, PDT
|
"yyyyy.MMMMM.dd GGG hh:mm
aaa"
|
02001.July.04 AD 12:08 PM
|
"EEE, d MMM yyyy HH:mm:ss
Z"
|
Wed, 4 Jul 2001 12:08:56 -0700
|
"yyMMddHHmmssZ"
|
010704120856-0700
|
"yyyy-MM-dd'T'HH:mm:ss.SSSZ"
|
2001-07-04T12:08:56.235-0700
|
****************************
JODA:
****************************
2.1 Date Format Pattern Syntax (Joda)
Symbol
|
Meaning
|
Presentation
|
Examples
|
G
|
Era designator
|
Text
|
AD
|
C
|
Century of era (>=0)
|
Number
|
20
|
Y
|
Year of era (>=0)
|
Year
|
1996
|
y
|
Year
|
Year
|
1996
|
x
|
Week of weekyear
|
Year
|
1996
|
M
|
Month of year
|
Month
|
July; Jul; 07
|
w
|
Week of year
|
Number
|
27
|
D
|
Day of year
|
Number
|
189
|
d
|
Day of month
|
Number
|
10
|
e
|
Day of week
|
Number
|
2
|
E
|
Day of week
|
Text
|
Tuesday; Tue
|
a
|
Halfday of day
|
Text
|
PM
|
H
|
Hour of day (0-23)
|
Number
|
0
|
k
|
Clockhour of day (1-24)
|
Number
|
24
|
K
|
Hour of halfday (0-11)
|
Number
|
0
|
h
|
Clockhour of halfday (1-12)
|
Number
|
12
|
m
|
Minute of hour
|
Number
|
30
|
s
|
Second of minute
|
Number
|
55
|
S
|
Fraction of second
|
Number
|
970
|
z
|
Time zone
|
Text
|
Pacific Standard Time; PST
|
Z
|
Time zone offset/id
|
Zone
|
-0800; -08:00; America/Los_Angeles
|
'
|
Escape for text/id
|
Delimiter
|
(none)
|
''
|
Single quote
|
Literal
|
'
|
We can see from above table, although actual format strings for Java and Joda are almost 100% compatible with each other, still there are differences. The 'F' in default java is not supported in Joda.
Basically, 'F' means 'Day of week in month', for example, '2013-11-8' is the second friday in Nov of 2013, so 'F' will get 2 as result. While 'E' means 'Day of week' only, with the same example, '2013-11-8', 'E' will get 5 as result, because it's Friday, the fifth day in the week.
The number of symbol letters you specify also determines the format. The following table summarizes these rules:
2.2 Rules for Date Format Usage (Joda)
Presentation
|
Processing
|
Number of Pattern Letters
|
Form
|
Text
|
Formatting
|
1 - 3
|
short or abbreviated form, if one
exists
|
Text
|
Formatting
|
>= 4
|
full form
|
Text
|
Parsing
|
>= 1
|
both forms
|
Year
|
Formatting
|
2
|
truncated to 2 digits
|
Year
|
Formatting
|
1 or >= 3
|
interpreted as Number.
|
Year
|
Parsing
|
>= 1
|
intepreted literally
|
Month
|
Both
|
1-2
|
interpreted as a Number
|
Month
|
Parsing
|
>= 3
|
interpreted as Text (using Roman
numbers, abbreviated month name - if exists, or full month name)
|
Month
|
Formatting
|
3
|
interpreted as Text (using Roman
numbers, or abbreviated month name - if exists)
|
Month
|
Formatting
|
>= 4
|
interpreted as Text (full month
name)
|
Number
|
Formatting
|
minimum number of required digits
|
shorter numbers are padded with
zeros
|
Number
|
Parsing
|
>= 1
|
any form
|
Zone name
|
Formatting
|
1-3
|
short or abbreviated form
|
Zone name
|
Formatting
|
>= 4
|
full form
|
Time zone offset/id
|
Formatting
|
1
|
Offset without a colon between
hours and minutes
|
Time zone offset/id
|
Formatting
|
2
|
Offset with a colon between hours
and minutes
|
Time zone offset/id
|
Formatting
|
>= 3
|
Full textual form like this:
"Continent/City"
|
Time zone offset/id
|
Parsing
|
1
|
Offset without a colon between
hours and minutes
|
Time zone offset/id
|
Parsing
|
2
|
Offset with a colon between hours
and minutes
|
For more details, the official docs are the best place to go.
Reference:
Micosoft: StandardDate and Time Format Strings
No comments:
Post a Comment