diff --git a/work/workmanager-gcm/src/androidTest/java/androidx/work/impl/background/gcm/GcmTaskConverterTest.kt b/work/workmanager-gcm/src/androidTest/java/androidx/work/impl/background/gcm/GcmTaskConverterTest.kt
index 827712634..547c3ac 100644
--- a/work/workmanager-gcm/src/androidTest/java/androidx/work/impl/background/gcm/GcmTaskConverterTest.kt
+++ b/work/workmanager-gcm/src/androidTest/java/androidx/work/impl/background/gcm/GcmTaskConverterTest.kt
@@ -27,6 +27,7 @@
 import androidx.work.impl.background.gcm.GcmTaskConverter.EXECUTION_WINDOW_SIZE_IN_SECONDS
 import com.google.android.gms.gcm.Task
 import org.hamcrest.Matchers.greaterThan
+import org.hamcrest.Matchers.lessThanOrEqualTo
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertThat
 import org.junit.Before
@@ -57,6 +58,7 @@
 
         val expected = request.workSpec.calculateNextRunTime()
         val offset = offset(expected, now)
+        val delta = task.windowEnd - (offset + EXECUTION_WINDOW_SIZE_IN_SECONDS)
 
         assertEquals(task.serviceName, WorkManagerGcmService::class.java.name)
         assertEquals(task.isPersisted, false)
@@ -64,7 +66,8 @@
         assertEquals(task.requiredNetwork, Task.NETWORK_STATE_ANY)
         assertEquals(task.requiresCharging, false)
         assertEquals(task.windowStart, offset)
-        assertEquals(task.windowEnd, offset + EXECUTION_WINDOW_SIZE_IN_SECONDS)
+        // Account for time unit quantization errors
+        assertThat(delta, lessThanOrEqualTo(1L))
     }
 
     @Test
@@ -84,6 +87,7 @@
         val task = mTaskConverter.convert(request.workSpec)
         val expected = request.workSpec.calculateNextRunTime()
         val offset = offset(expected, now)
+        val delta = task.windowEnd - (offset + EXECUTION_WINDOW_SIZE_IN_SECONDS)
 
         assertEquals(task.serviceName, WorkManagerGcmService::class.java.name)
         assertEquals(task.isPersisted, false)
@@ -91,7 +95,8 @@
         assertEquals(task.requiredNetwork, Task.NETWORK_STATE_CONNECTED)
         assertEquals(task.requiresCharging, true)
         assertEquals(task.windowStart, offset)
-        assertEquals(task.windowEnd, offset + EXECUTION_WINDOW_SIZE_IN_SECONDS)
+        // Account for time unit quantization errors
+        assertThat(delta, lessThanOrEqualTo(1L))
     }
 
     @Test
@@ -110,6 +115,7 @@
         val task = mTaskConverter.convert(request.workSpec)
         val expected = request.workSpec.calculateNextRunTime()
         val offset = offset(expected, now)
+        val delta = task.windowEnd - (offset + EXECUTION_WINDOW_SIZE_IN_SECONDS)
 
         assertEquals(task.serviceName, WorkManagerGcmService::class.java.name)
         assertEquals(task.isPersisted, false)
@@ -117,7 +123,8 @@
         assertEquals(task.requiredNetwork, Task.NETWORK_STATE_UNMETERED)
         assertEquals(task.requiresCharging, false)
         assertEquals(task.windowStart, offset)
-        assertEquals(task.windowEnd, offset + EXECUTION_WINDOW_SIZE_IN_SECONDS)
+        // Account for time unit quantization errors
+        assertThat(delta, lessThanOrEqualTo(1L))
     }
 
     @Test
@@ -133,6 +140,7 @@
         val task = mTaskConverter.convert(request.workSpec)
         val expected = request.workSpec.calculateNextRunTime()
         val offset = offset(expected, now)
+        val delta = task.windowEnd - (offset + EXECUTION_WINDOW_SIZE_IN_SECONDS)
 
         assertEquals(task.serviceName, WorkManagerGcmService::class.java.name)
         assertEquals(task.isPersisted, false)
@@ -140,7 +148,8 @@
         assertEquals(task.requiredNetwork, Task.NETWORK_STATE_ANY)
         assertEquals(task.requiresCharging, false)
         assertEquals(task.windowStart, offset)
-        assertEquals(task.windowEnd, offset + EXECUTION_WINDOW_SIZE_IN_SECONDS)
+        // Account for time unit quantization errors
+        assertThat(delta, lessThanOrEqualTo(1L))
     }
 
     @Test
@@ -153,17 +162,19 @@
             .build()
 
         val workSpec = request.workSpec
+        val task = mTaskConverter.convert(request.workSpec)
         val expected = workSpec.calculateNextRunTime()
         val offset = offset(expected, now)
+        val delta = task.windowEnd - (offset + EXECUTION_WINDOW_SIZE_IN_SECONDS)
 
-        val task = mTaskConverter.convert(request.workSpec)
         assertEquals(task.serviceName, WorkManagerGcmService::class.java.name)
         assertEquals(task.isPersisted, false)
         assertEquals(task.isUpdateCurrent, true)
         assertEquals(task.requiredNetwork, Task.NETWORK_STATE_ANY)
         assertEquals(task.requiresCharging, false)
         assertEquals(task.windowStart, offset)
-        assertEquals(task.windowEnd, offset + EXECUTION_WINDOW_SIZE_IN_SECONDS)
+        // Account for time unit quantization errors
+        assertThat(delta, lessThanOrEqualTo(1L))
     }
 
     @Test
@@ -175,9 +186,10 @@
         val request = PeriodicWorkRequestBuilder<TestWorker>(15L, TimeUnit.MINUTES)
             .build()
 
+        val task = mTaskConverter.convert(request.workSpec)
         val expected = request.workSpec.calculateNextRunTime()
         val offset = offset(expected, now)
-        val task = mTaskConverter.convert(request.workSpec)
+        val delta = task.windowEnd - (offset + EXECUTION_WINDOW_SIZE_IN_SECONDS)
 
         assertEquals(task.serviceName, WorkManagerGcmService::class.java.name)
         assertEquals(task.isPersisted, false)
@@ -185,7 +197,8 @@
         assertEquals(task.requiredNetwork, Task.NETWORK_STATE_ANY)
         assertEquals(task.requiresCharging, false)
         assertEquals(task.windowStart, offset)
-        assertEquals(task.windowEnd, offset + EXECUTION_WINDOW_SIZE_IN_SECONDS)
+        // Account for time unit quantization errors
+        assertThat(delta, lessThanOrEqualTo(1L))
     }
 
     @Test
