Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
3a9428df
R
rails
项目概览
张重言
/
rails
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rails
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
3a9428df
编写于
6月 25, 2016
作者:
G
Godfrey Chan
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #23011 from arnvald/bugfix/correctly_parse_date
Use correct timezone when parsing date in json
上级
a4acb4da
a3ddd5f1
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
25 addition
and
7 deletion
+25
-7
activesupport/CHANGELOG.md
activesupport/CHANGELOG.md
+5
-0
activesupport/lib/active_support/json/decoding.rb
activesupport/lib/active_support/json/decoding.rb
+9
-2
activesupport/test/json/decoding_test.rb
activesupport/test/json/decoding_test.rb
+11
-5
未找到文件。
activesupport/CHANGELOG.md
浏览文件 @
3a9428df
*
Fix parsing JSON time in
`YYYY-MM-DD hh:mm:ss`
(without
`Z`
).
Before such time was considered in UTC timezone, now, to comply with standard, it uses local timezone.
*Grzegorz Witek*
*
Fixed
`ActiveSupport::Logger.broadcast`
so that calls to
`#silence`
now
properly delegate to all loggers. Silencing now properly suppresses logging
to both the log and the console.
...
...
activesupport/lib/active_support/json/decoding.rb
浏览文件 @
3a9428df
...
...
@@ -8,7 +8,8 @@ module ActiveSupport
module
JSON
# matches YAML-formatted dates
DATE_REGEX
=
/^(?:\d{4}-\d{2}-\d{2}|\d{4}-\d{1,2}-\d{1,2}[T \t]+\d{1,2}:\d{2}:\d{2}(\.[0-9]*)?(([ \t]*)Z|[-+]\d{2}?(:\d{2})?))$/
DATE_REGEX
=
/^\d{4}-\d{2}-\d{2}$/
DATETIME_REGEX
=
/^(?:\d{4}-\d{2}-\d{2}|\d{4}-\d{1,2}-\d{1,2}[T \t]+\d{1,2}:\d{2}:\d{2}(\.[0-9]*)?(([ \t]*)Z|[-+]\d{2}?(:\d{2})?)?)$/
class
<<
self
# Parses a JSON string (JavaScript Object Notation) into a hash.
...
...
@@ -48,7 +49,13 @@ def convert_dates_from(data)
nil
when
DATE_REGEX
begin
DateTime
.
parse
(
data
)
Date
.
parse
(
data
)
rescue
ArgumentError
data
end
when
DATETIME_REGEX
begin
Time
.
zone
.
parse
(
data
)
rescue
ArgumentError
data
end
...
...
activesupport/test/json/decoding_test.rb
浏览文件 @
3a9428df
require
'abstract_unit'
require
'active_support/json'
require
'active_support/time'
require
'time_zone_test_helpers'
class
TestJSONDecoding
<
ActiveSupport
::
TestCase
include
TimeZoneTestHelpers
class
Foo
def
self
.
json_create
(
object
)
"Foo"
...
...
@@ -24,10 +27,11 @@ def self.json_create(object)
%(["2007-01-01 01:12:34 Z"])
=>
[
Time
.
utc
(
2007
,
1
,
1
,
1
,
12
,
34
)],
%(["2007-01-01 01:12:34 Z", "2007-01-01 01:12:35 Z"])
=>
[
Time
.
utc
(
2007
,
1
,
1
,
1
,
12
,
34
),
Time
.
utc
(
2007
,
1
,
1
,
1
,
12
,
35
)],
# no time zone
%({"a": "2007-01-01 01:12:34"})
=>
{
'a'
=>
"2007-01-01 01:12:34"
},
%({"a": "2007-01-01 01:12:34"})
=>
{
'a'
=>
Time
.
new
(
2007
,
1
,
1
,
1
,
12
,
34
,
"-05:00"
)
},
# invalid date
%({"a": "1089-10-40"})
=>
{
'a'
=>
"1089-10-40"
},
# xmlschema date notation
%({"a": "2009-08-10T19:01:02"})
=>
{
'a'
=>
Time
.
new
(
2009
,
8
,
10
,
19
,
1
,
2
,
"-04:00"
)},
%({"a": "2009-08-10T19:01:02Z"})
=>
{
'a'
=>
Time
.
utc
(
2009
,
8
,
10
,
19
,
1
,
2
)},
%({"a": "2009-08-10T19:01:02+02:00"})
=>
{
'a'
=>
Time
.
utc
(
2009
,
8
,
10
,
17
,
1
,
2
)},
%({"a": "2009-08-10T19:01:02-05:00"})
=>
{
'a'
=>
Time
.
utc
(
2009
,
8
,
11
,
00
,
1
,
2
)},
...
...
@@ -72,10 +76,12 @@ def self.json_create(object)
TESTS
.
each_with_index
do
|
(
json
,
expected
),
index
|
test
"json decodes
#{
index
}
"
do
with_parse_json_times
(
true
)
do
silence_warnings
do
assert_equal
expected
,
ActiveSupport
::
JSON
.
decode
(
json
),
"JSON decoding \
failed for
#{
json
}
"
with_tz_default
'Eastern Time (US & Canada)'
do
with_parse_json_times
(
true
)
do
silence_warnings
do
assert_equal
expected
,
ActiveSupport
::
JSON
.
decode
(
json
),
"JSON decoding \
failed for
#{
json
}
"
end
end
end
end
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录