Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
H
histream
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
Operations
Operations
Incidents
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Raphael
histream
Commits
a4988374
Commit
a4988374
authored
Sep 05, 2017
by
R.W.Majeed
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fixed wrong timestamp conversion from/to instant
parent
e992755e
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
37 additions
and
9 deletions
+37
-9
histream-i2b2/src/main/java/de/sekmi/histream/i2b2/DataDialect.java
...2b2/src/main/java/de/sekmi/histream/i2b2/DataDialect.java
+5
-4
histream-i2b2/src/test/java/de/sekmi/histream/i2b2/TestDataDialect.java
...src/test/java/de/sekmi/histream/i2b2/TestDataDialect.java
+32
-5
No files found.
histream-i2b2/src/main/java/de/sekmi/histream/i2b2/DataDialect.java
View file @
a4988374
...
...
@@ -3,7 +3,6 @@ package de.sekmi.histream.i2b2;
import
java.sql.Timestamp
;
import
java.time.Instant
;
import
java.time.ZoneId
;
import
java.time.ZoneOffset
;
import
de.sekmi.histream.AbnormalFlag
;
import
de.sekmi.histream.DateTimeAccuracy
;
...
...
@@ -29,7 +28,7 @@ public class DataDialect {
private
String
nullValueFlagCd
;
private
String
nullValueTypeCd
;
/** Timezone for timestamp / date time columns */
private
ZoneId
zoneId
;
private
ZoneId
zoneId
;
// TODO may not be needed since the db always uses epoch seconds
// TODO nullSexCd, nullInOutCd
public
DataDialect
(){
...
...
@@ -76,7 +75,8 @@ public class DataDialect {
if
(
instant
==
null
){
return
null
;
}
else
{
return
Timestamp
.
from
(
instant
.
atZone
(
zoneId
).
toLocalDateTime
().
atOffset
(
ZoneOffset
.
UTC
).
toInstant
());
return
Timestamp
.
from
(
instant
);
//return Timestamp.from(instant.atZone(zoneId).toLocalDateTime().atOffset(ZoneOffset.UTC).toInstant());
}
}
public
Timestamp
encodeInstantPartial
(
DateTimeAccuracy
instant
){
...
...
@@ -90,7 +90,8 @@ public class DataDialect {
if
(
timestamp
==
null
){
return
null
;
}
else
{
return
timestamp
.
toInstant
().
atOffset
(
ZoneOffset
.
UTC
).
toLocalDateTime
().
atZone
(
zoneId
).
toInstant
();
return
timestamp
.
toInstant
();
//return timestamp.toInstant().atOffset(ZoneOffset.UTC).toLocalDateTime().atZone(zoneId).toInstant();
}
}
public
DateTimeAccuracy
decodeInstantPartial
(
Timestamp
timestamp
){
...
...
histream-i2b2/src/test/java/de/sekmi/histream/i2b2/TestDataDialect.java
View file @
a4988374
package
de.sekmi.histream.i2b2
;
import
java.sql.Connection
;
import
java.sql.PreparedStatement
;
import
java.sql.SQLException
;
import
java.sql.Statement
;
import
java.sql.Timestamp
;
import
java.time.Instant
;
import
java.time.LocalDateTime
;
...
...
@@ -9,17 +13,24 @@ import static org.junit.Assert.*;
import
org.junit.Test
;
import
de.sekmi.histream.DateTimeAccuracy
;
import
static
org
.
junit
.
Assert
.*;
public
class
TestDataDialect
{
@Test
public
void
localDateTimeVerbatimOutput
(){
LocalDateTime
local
=
LocalDateTime
.
of
(
2001
,
2
,
3
,
4
,
5
);
// local date time will be encoded as is, without offset
assertEquals
(
"2001-02-03T04:05"
,
local
.
toString
());
// SQL timestamp will use the local timezone.
// We should not use this method for conversion with explicit zones
Timestamp
ts
=
Timestamp
.
valueOf
(
local
);
System
.
out
.
println
(
"Local time "
+
local
+
" to SQL Timestamp: "
+
ts
.
toInstant
());
}
@Test
public
void
verifySqlTimestampConversions
(){
DataDialect
dialect
=
new
DataDialect
();
dialect
.
setTimeZone
(
ZoneId
.
of
(
"Asia/Shanghai"
));
LocalDateTime
local
=
LocalDateTime
.
of
(
2001
,
2
,
3
,
4
,
5
);
System
.
out
.
println
(
local
.
toString
());
Timestamp
ts
=
Timestamp
.
valueOf
(
local
);
System
.
out
.
println
(
ts
.
toInstant
());
Timestamp
ts
;
Instant
inst
=
Instant
.
parse
(
"2001-02-03T04:05:06Z"
);
DateTimeAccuracy
da
=
new
DateTimeAccuracy
(
inst
);
...
...
@@ -34,4 +45,20 @@ public class TestDataDialect {
System
.
out
.
println
(
b
);
assertEquals
(
inst
,
b
);
}
public
static
void
main
(
String
[]
args
)
throws
SQLException
{
// verify how timestamps get written to the database
Connection
c
=
new
TestExtractor
().
getConnection
();
Statement
s
=
c
.
createStatement
();
s
.
executeUpdate
(
"DELETE FROM source_master WHERE source_cd='db_test'"
);
s
.
close
();
PreparedStatement
ps
=
c
.
prepareStatement
(
"INSERT INTO source_master(source_cd, create_date) VALUES(?,?)"
);
ps
.
setString
(
1
,
"db_test"
);
Instant
inst
=
Instant
.
parse
(
"2001-08-03T04:05:06Z"
);
ps
.
setTimestamp
(
2
,
Timestamp
.
from
(
inst
));
ps
.
executeUpdate
();
ps
.
close
();
//c.commit();
c
.
close
();
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment