diff --git a/homeassistant/core.py b/homeassistant/core.py
index 39ee20cb1a8c824b2b65b1664f3074eefed84fb8..18520ed5d0c9e25bcc138d0495fbc33d0476fbfa 100644
--- a/homeassistant/core.py
+++ b/homeassistant/core.py
@@ -1256,4 +1256,5 @@ def _async_create_timer(hass: HomeAssistant) -> None:
     hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, stop_timer)
 
     _LOGGER.info("Timer:starting")
-    fire_time_event(monotonic())
+    slp_seconds = 1 - (dt_util.utcnow().microsecond / 10**6)
+    hass.loop.call_later(slp_seconds, lambda: fire_time_event(monotonic()))
diff --git a/tests/test_core.py b/tests/test_core.py
index 7e6d57136e45c61caf7a415bdd7fe6c89e5888a5..4eecf995811fb8b8c3d770d4ec06c1562790068a 100644
--- a/tests/test_core.py
+++ b/tests/test_core.py
@@ -862,21 +862,29 @@ def test_create_timer(mock_monotonic, loop):
 
     with patch.object(ha, 'callback', mock_callback), \
             patch('homeassistant.core.dt_util.utcnow',
-                  return_value=sentinel.mock_date):
+                  return_value=datetime(2018, 12, 31, 3, 4, 5, 333333)):
         ha._async_create_timer(hass)
 
+    assert len(hass.loop.call_later.mock_calls) == 1
+    slp_seconds, action = hass.loop.call_later.mock_calls[0][1]
+    assert abs(slp_seconds - 0.666667) < 0.001
+
+    with patch('homeassistant.core.dt_util.utcnow',
+               return_value=sentinel.mock_date):
+        action()
+
         assert len(funcs) == 2
         fire_time_event, stop_timer = funcs
 
     assert len(hass.bus.async_listen_once.mock_calls) == 1
     assert len(hass.bus.async_fire.mock_calls) == 1
-    assert len(hass.loop.call_later.mock_calls) == 1
+    assert len(hass.loop.call_later.mock_calls) == 2
 
     event_type, callback = hass.bus.async_listen_once.mock_calls[0][1]
     assert event_type == EVENT_HOMEASSISTANT_STOP
     assert callback is stop_timer
 
-    slp_seconds, callback, nxt = hass.loop.call_later.mock_calls[0][1]
+    slp_seconds, callback, nxt = hass.loop.call_later.mock_calls[1][1]
     assert abs(slp_seconds - 0.9) < 0.001
     assert callback is fire_time_event
     assert abs(nxt - 11.2) < 0.001
@@ -901,15 +909,21 @@ def test_timer_out_of_sync(mock_monotonic, loop):
 
     with patch.object(ha, 'callback', mock_callback), \
             patch('homeassistant.core.dt_util.utcnow',
-                  return_value=sentinel.mock_date):
+                  return_value=datetime(2018, 12, 31, 3, 4, 5, 333333)):
         ha._async_create_timer(hass)
 
+    _, action = hass.loop.call_later.mock_calls[0][1]
+
+    with patch('homeassistant.core.dt_util.utcnow',
+               return_value=sentinel.mock_date):
+        action()
+
         assert len(funcs) == 2
         fire_time_event, stop_timer = funcs
 
-    assert len(hass.loop.call_later.mock_calls) == 1
+    assert len(hass.loop.call_later.mock_calls) == 2
 
-    slp_seconds, callback, nxt = hass.loop.call_later.mock_calls[0][1]
+    slp_seconds, callback, nxt = hass.loop.call_later.mock_calls[1][1]
     assert slp_seconds == 1
     assert callback is fire_time_event
     assert abs(nxt - 12.3) < 0.001