Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
此号慢热型
excelize
提交
3a91b28d
excelize
项目概览
此号慢热型
/
excelize
与 Fork 源项目一致
Fork自
xuri / excelize
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
excelize
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
3a91b28d
编写于
6月 20, 2018
作者:
xurime
提交者:
GitHub
6月 20, 2018
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #237 from liepumartins/patch-1
Ability to parse dates further in future
上级
5db716d8
37c470e8
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
64 addition
and
1 deletion
+64
-1
date.go
date.go
+22
-1
date_test.go
date_test.go
+42
-0
未找到文件。
date.go
浏览文件 @
3a91b28d
...
...
@@ -15,7 +15,20 @@ func timeToUTCTime(t time.Time) time.Time {
// timeToExcelTime provides function to convert time to Excel time.
func
timeToExcelTime
(
t
time
.
Time
)
float64
{
return
float64
(
t
.
UnixNano
())
/
8.64e13
+
25569.0
// TODO in future this should probably also handle date1904 and like TimeFromExcelTime
var
excelTime
float64
excelTime
=
0
// check if UnixNano would be out of int64 range
for
t
.
Unix
()
>
9223372036
{
// reduce by aprox. 290 years, which is max for int64 nanoseconds
deltaDays
:=
290
*
364
delta
:=
time
.
Duration
(
deltaDays
*
8.64e13
)
excelTime
=
excelTime
+
float64
(
deltaDays
)
t
=
t
.
Add
(
-
delta
)
}
// finally add remainder of UnixNano to keep nano precision
// and 25569 which is days between 1900 and 1970
return
excelTime
+
float64
(
t
.
UnixNano
())
/
8.64e13
+
25569.0
}
// shiftJulianToNoon provides function to process julian date to noon.
...
...
@@ -90,6 +103,7 @@ func doTheFliegelAndVanFlandernAlgorithm(jd int) (day, month, year int) {
// timeFromExcelTime provides function to convert an excelTime representation
// (stored as a floating point number) to a time.Time.
func
timeFromExcelTime
(
excelTime
float64
,
date1904
bool
)
time
.
Time
{
const
MDD
int64
=
106750
// Max time.Duration Days, aprox. 290 years
var
date
time
.
Time
var
intPart
=
int64
(
excelTime
)
// Excel uses Julian dates prior to March 1st 1900, and Gregorian
...
...
@@ -113,6 +127,13 @@ func timeFromExcelTime(excelTime float64, date1904 bool) time.Time {
}
else
{
date
=
time
.
Date
(
1899
,
12
,
30
,
0
,
0
,
0
,
0
,
time
.
UTC
)
}
// Duration is limited to aprox. 290 years
for
intPart
>
MDD
{
durationDays
:=
time
.
Duration
(
MDD
)
*
time
.
Hour
*
24
date
=
date
.
Add
(
durationDays
)
intPart
=
intPart
-
MDD
}
durationDays
:=
time
.
Duration
(
intPart
)
*
time
.
Hour
*
24
durationPart
:=
time
.
Duration
(
dayNanoSeconds
*
floatPart
)
return
date
.
Add
(
durationDays
)
.
Add
(
durationPart
)
...
...
date_test.go
0 → 100644
浏览文件 @
3a91b28d
package
excelize
import
(
"testing"
"time"
)
type
dateTest
struct
{
ExcelValue
float64
GoValue
time
.
Time
}
func
TestTimeToExcelTime
(
t
*
testing
.
T
)
{
trueExpectedInputList
:=
[]
dateTest
{
{
0.0
,
time
.
Date
(
1899
,
12
,
30
,
0
,
0
,
0
,
0
,
time
.
UTC
)},
{
25569.0
,
time
.
Unix
(
0
,
0
)},
{
43269.0
,
time
.
Date
(
2018
,
6
,
18
,
0
,
0
,
0
,
0
,
time
.
UTC
)},
{
401769.0
,
time
.
Date
(
3000
,
1
,
1
,
0
,
0
,
0
,
0
,
time
.
UTC
)},
}
for
_
,
test
:=
range
trueExpectedInputList
{
if
test
.
ExcelValue
!=
timeToExcelTime
(
test
.
GoValue
)
{
t
.
Fatalf
(
"Expected %v from %v = true, got %v
\n
"
,
test
.
ExcelValue
,
test
.
GoValue
,
timeToExcelTime
(
test
.
GoValue
))
}
}
}
func
TestTimeFromExcelTime
(
t
*
testing
.
T
)
{
trueExpectedInputList
:=
[]
dateTest
{
{
0.0
,
time
.
Date
(
1899
,
12
,
30
,
0
,
0
,
0
,
0
,
time
.
UTC
)},
{
60.0
,
time
.
Date
(
1900
,
2
,
28
,
0
,
0
,
0
,
0
,
time
.
UTC
)},
{
61.0
,
time
.
Date
(
1900
,
3
,
1
,
0
,
0
,
0
,
0
,
time
.
UTC
)},
{
41275.0
,
time
.
Date
(
2013
,
1
,
1
,
0
,
0
,
0
,
0
,
time
.
UTC
)},
{
401769.0
,
time
.
Date
(
3000
,
1
,
1
,
0
,
0
,
0
,
0
,
time
.
UTC
)},
}
for
_
,
test
:=
range
trueExpectedInputList
{
if
test
.
GoValue
!=
timeFromExcelTime
(
test
.
ExcelValue
,
false
)
{
t
.
Fatalf
(
"Expected %v from %v = true, got %v
\n
"
,
test
.
GoValue
,
test
.
ExcelValue
,
timeFromExcelTime
(
test
.
ExcelValue
,
false
))
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录