Skip to content

Commit d2fcdb2

Browse files
committed
Use Instant
1 parent 19a94f8 commit d2fcdb2

2 files changed

Lines changed: 31 additions & 28 deletions

File tree

‎api/src/org/labkey/api/data/dialect/SqlDialect.java‎

Lines changed: 26 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,10 @@
8080
import java.sql.ResultSet;
8181
import java.sql.SQLException;
8282
import java.sql.Statement;
83+
import java.sql.Timestamp;
8384
import java.sql.Types;
8485
import java.time.Duration;
85-
import java.time.LocalDateTime;
86+
import java.time.Instant;
8687
import java.util.ArrayList;
8788
import java.util.Arrays;
8889
import java.util.Calendar;
@@ -867,25 +868,25 @@ public SQLFragment getNumericCast(SQLFragment expression)
867868
* @param arguments Arguments passed from the LK SQL
868869
* @return the dialect equivalent SQLFragrment
869870
*/
870-
public SQLFragment getGreatestAndLeastSQL(String method, SQLFragment... arguments)
871-
{
872-
throw new UnsupportedOperationException(getClass().getSimpleName() + " does not implement");
873-
}
874-
875-
public boolean supportsIsNumeric()
876-
{
877-
return false;
878-
}
879-
880-
public SQLFragment isNumericExpr(SQLFragment expression)
881-
{
882-
throw new UnsupportedOperationException(getClass().getSimpleName() + " does not implement");
883-
}
884-
885-
public void handleCreateDatabaseException(SQLException e) throws ServletException
886-
{
887-
throw(new ServletException("Can't create database", e));
888-
}
871+
public SQLFragment getGreatestAndLeastSQL(String method, SQLFragment... arguments)
872+
{
873+
throw new UnsupportedOperationException(getClass().getSimpleName() + " does not implement");
874+
}
875+
876+
public boolean supportsIsNumeric()
877+
{
878+
return false;
879+
}
880+
881+
public SQLFragment isNumericExpr(SQLFragment expression)
882+
{
883+
throw new UnsupportedOperationException(getClass().getSimpleName() + " does not implement");
884+
}
885+
886+
public void handleCreateDatabaseException(SQLException e) throws ServletException
887+
{
888+
throw(new ServletException("Can't create database", e));
889+
}
889890

890891
/**
891892
* Wrap one or more INSERT statements to allow explicit specification
@@ -2004,13 +2005,14 @@ public void addAdminWarningMessages(Warnings warnings, boolean showAllWarnings)
20042005

20052006
public static ServerDatabaseTimeDifference getServerDatabaseTimeDifference(DbScope scope)
20062007
{
2007-
LocalDateTime serverTime = LocalDateTime.now();
2008-
LocalDateTime databaseTime = new SqlSelector(scope, "SELECT CURRENT_TIMESTAMP").getObject(LocalDateTime.class);
2008+
// Compare Instants, not wall-clock values, so the skew is measured correctly even when the servers are in different time zones.
2009+
Instant serverTime = Instant.now();
2010+
Instant databaseTime = new SqlSelector(scope, "SELECT CURRENT_TIMESTAMP").getObject(Timestamp.class).toInstant();
20092011

20102012
return new ServerDatabaseTimeDifference(serverTime, databaseTime);
20112013
}
20122014

2013-
public record ServerDatabaseTimeDifference(LocalDateTime serverTime, LocalDateTime databaseTime)
2015+
public record ServerDatabaseTimeDifference(Instant serverTime, Instant databaseTime)
20142016
{
20152017
public long getSeconds()
20162018
{
@@ -2476,7 +2478,7 @@ public void testProcedureIdentifierQuoting()
24762478
@Test
24772479
public void testServerDatabaseTimeDifference()
24782480
{
2479-
LocalDateTime base = LocalDateTime.of(2026, 7, 6, 12, 0, 0);
2481+
Instant base = Instant.parse("2026-07-06T12:00:00Z");
24802482

24812483
// Identical times: zero difference, no warning
24822484
ServerDatabaseTimeDifference equal = new ServerDatabaseTimeDifference(base, base);

‎core/src/org/labkey/core/admin/admin.jsp‎

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
<%@ page import="org.labkey.api.view.NavTree" %>
3636
<%@ page import="org.labkey.core.admin.AdminController" %>
3737
<%@ page import="java.text.DecimalFormat" %>
38+
<%@ page import="java.time.ZoneId" %>
3839
<%@ page import="java.time.format.DateTimeFormatter" %>
3940
<%@ page import="java.util.ArrayList" %>
4041
<%@ page import="java.util.Collection" %>
@@ -92,7 +93,7 @@
9293
<br/>
9394
<%
9495
row = 0;
95-
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(DateUtil.getJsonDateTimeFormatString());
96+
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(DateUtil.getJsonDateTimeFormatString()).withZone(ZoneId.systemDefault());
9697
String timeCellCls = "";
9798
HtmlString warning = HtmlString.EMPTY_STRING;
9899
@@ -129,9 +130,9 @@
129130
<tr class="<%=getShadeRowClass(row++)%>"><td>Working Dir</td><td><%=h(AdminBean.workingDir)%></td></tr>
130131
<tr class="<%=getShadeRowClass(row++)%>"><td>Server GUID</td><td style="font-family:monospace"><%=h(AdminBean.serverGuid)%></td></tr>
131132
<tr class="<%=getShadeRowClass(row++)%>"><td>Server Session GUID</td><td style="font-family:monospace"><%=h(AdminBean.serverSessionGuid)%></td></tr>
132-
<tr class="<%=getShadeRowClass(row++)%>"><td>Server Startup Time</td><td class="<%=h(timeCellCls)%>"><%=h(AdminBean.serverStartupTime)%></td></tr>
133-
<tr class="<%=getShadeRowClass(row++)%>"><td>Web Server Time</td><td class="<%=h(timeCellCls)%>"><%=h(timeDifference.serverTime().format(dateTimeFormatter))%><%=warning%></td></tr>
134-
<tr class="<%=getShadeRowClass(row++)%>"><td>Database Server Time</td><td class="<%=h(timeCellCls)%>"><%=h(timeDifference.databaseTime().format(dateTimeFormatter))%><%=warning%></td></tr>
133+
<tr class="<%=getShadeRowClass(row++)%>"><td>Server Startup Time</td><td><%=h(AdminBean.serverStartupTime)%></td></tr>
134+
<tr class="<%=getShadeRowClass(row++)%>"><td>Web Server Time</td><td class="<%=h(timeCellCls)%>"><%=h(dateTimeFormatter.format(timeDifference.serverTime()))%><%=warning%></td></tr>
135+
<tr class="<%=getShadeRowClass(row++)%>"><td>Database Server Time</td><td class="<%=h(timeCellCls)%>"><%=h(dateTimeFormatter.format(timeDifference.databaseTime()))%><%=warning%></td></tr>
135136
</table>
136137
</labkey:panel>
137138
<labkey:panel id="links" className="lk-admin-section">

0 commit comments

Comments
 (0)