Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
为 GitLab 提交贡献
登录/注册
切换导航
H
h2database
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
Administrator
h2database
Commits
586bd8b4
提交
586bd8b4
authored
7 年前
作者:
Evgenij Ryazanov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add and use fast DateTimeUtils.absoluteDayFromYear()
上级
5ba9d11d
显示空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
26 行增加
和
5 行删除
+26
-5
DateTimeUtils.java
h2/src/main/org/h2/util/DateTimeUtils.java
+22
-3
ToDateParser.java
h2/src/main/org/h2/util/ToDateParser.java
+1
-2
TestDate.java
h2/src/test/org/h2/test/unit/TestDate.java
+3
-0
没有找到文件。
h2/src/main/org/h2/util/DateTimeUtils.java
浏览文件 @
586bd8b4
...
...
@@ -744,8 +744,7 @@ public class DateTimeUtils {
* @return number of day in year
*/
public
static
int
getDayOfYear
(
long
dateValue
)
{
int
year
=
yearFromDateValue
(
dateValue
);
return
(
int
)
(
absoluteDayFromDateValue
(
dateValue
)
-
absoluteDayFromDateValue
(
dateValue
(
year
,
1
,
1
)))
+
1
;
return
(
int
)
(
absoluteDayFromDateValue
(
dateValue
)
-
absoluteDayFromYear
(
yearFromDateValue
(
dateValue
)))
+
1
;
}
/**
...
...
@@ -825,7 +824,7 @@ public class DateTimeUtils {
}
private
static
long
getWeekOfYearBase
(
int
year
,
int
firstDayOfWeek
,
int
minimalDaysInFirstWeek
)
{
long
first
=
absoluteDayFrom
DateValue
(
dateValue
(
year
,
1
,
1
)
);
long
first
=
absoluteDayFrom
Year
(
year
);
int
daysInFirstWeek
=
8
-
getDayOfWeekFromAbsolute
(
first
,
firstDayOfWeek
);
long
base
=
first
+
daysInFirstWeek
;
if
(
daysInFirstWeek
>=
minimalDaysInFirstWeek
)
{
...
...
@@ -1230,6 +1229,26 @@ public class DateTimeUtils {
return
ValueTimestampTimeZone
.
fromDateValueAndNanos
(
dateValue
,
timeNanos
,
(
short
)
offsetMins
);
}
/**
* Calculate the absolute day for a January, 1 of the specified year.
*
* @param year
* the year
* @return the absolute day
*/
public
static
long
absoluteDayFromYear
(
long
year
)
{
year
--;
long
a
=
((
year
*
2922L
)
>>
3
)
-
719_177
;
if
(
year
<
1582
)
{
// Julian calendar
a
+=
13
;
}
else
if
(
year
<
1900
||
year
>
2099
)
{
// Gregorian calendar (slow mode)
a
+=
(
year
/
400
)
-
(
year
/
100
)
+
15
;
}
return
a
;
}
/**
* Calculate the absolute day from an encoded date value.
*
...
...
This diff is collapsed.
Click to expand it.
h2/src/main/org/h2/util/ToDateParser.java
浏览文件 @
586bd8b4
...
...
@@ -91,8 +91,7 @@ public class ToDateParser {
}
if
(
doyValid
)
{
dateValue
=
DateTimeUtils
.
dateValueFromAbsoluteDay
(
DateTimeUtils
.
absoluteDayFromDateValue
(
DateTimeUtils
.
dateValue
(
year
,
1
,
1
))
+
dayOfYear
-
1
);
DateTimeUtils
.
absoluteDayFromYear
(
year
)
+
dayOfYear
-
1
);
}
else
{
int
month
=
this
.
month
;
if
(
month
==
0
)
{
...
...
This diff is collapsed.
Click to expand it.
h2/src/test/org/h2/test/unit/TestDate.java
浏览文件 @
586bd8b4
...
...
@@ -371,6 +371,9 @@ public class TestDate extends TestBase {
if
(
abs
!=
next
&&
next
!=
Long
.
MIN_VALUE
)
{
assertEquals
(
abs
,
next
);
}
if
(
m
==
1
&&
d
==
1
)
{
assertEquals
(
abs
,
DateTimeUtils
.
absoluteDayFromYear
(
y
));
}
next
=
abs
+
1
;
long
d2
=
DateTimeUtils
.
dateValueFromAbsoluteDay
(
abs
);
assertEquals
(
date
,
d2
);
...
...
This diff is collapsed.
Click to expand it.
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论