diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt
index e419810077ccdf95cf4d3e1e8725c25f5afe0dea..f5c92a5aaafa501b5d3fbbc14d501c1807776f03 100644
--- a/src/core/CMakeLists.txt
+++ b/src/core/CMakeLists.txt
@@ -55,6 +55,8 @@ set(SRCS
             hle/service/service.cpp
             hle/service/sm/controller.cpp
             hle/service/sm/sm.cpp
+            hle/service/time/time.cpp
+            hle/service/time/time_s.cpp
             hle/service/vi/vi.cpp
             hle/service/vi/vi_m.cpp
             hle/shared_page.cpp
@@ -141,6 +143,8 @@ set(HEADERS
             hle/service/service.h
             hle/service/sm/controller.h
             hle/service/sm/sm.h
+            hle/service/time/time.h
+            hle/service/time/time_s.h
             hle/service/vi/vi.h
             hle/service/vi/vi_m.h
             hle/shared_page.h
diff --git a/src/core/hle/service/service.cpp b/src/core/hle/service/service.cpp
index c275259805d1d77b4e0bb328db1d9c9668df1066..02d4346601ac37a2c3b983a32322730ba7af9a29 100644
--- a/src/core/hle/service/service.cpp
+++ b/src/core/hle/service/service.cpp
@@ -25,6 +25,7 @@
 #include "core/hle/service/service.h"
 #include "core/hle/service/sm/controller.h"
 #include "core/hle/service/sm/sm.h"
+#include "core/hle/service/time/time.h"
 #include "core/hle/service/vi/vi.h"
 
 using Kernel::ClientPort;
@@ -79,7 +80,8 @@ Kernel::SharedPtr<Kernel::ClientPort> ServiceFrameworkBase::CreatePort() {
     ASSERT(port == nullptr);
     Kernel::SharedPtr<Kernel::ServerPort> server_port;
     Kernel::SharedPtr<Kernel::ClientPort> client_port;
-    std::tie(server_port, client_port) = Kernel::ServerPort::CreatePortPair(max_sessions, service_name);
+    std::tie(server_port, client_port) =
+        Kernel::ServerPort::CreatePortPair(max_sessions, service_name);
     port = MakeResult<Kernel::SharedPtr<Kernel::ServerPort>>(std::move(server_port)).Unwrap();
     port->SetHleHandler(shared_from_this());
     return client_port;
@@ -170,6 +172,7 @@ void Init() {
     LM::InstallInterfaces(*SM::g_service_manager);
     NVDRV::InstallInterfaces(*SM::g_service_manager);
     PCTL::InstallInterfaces(*SM::g_service_manager);
+    Time::InstallInterfaces(*SM::g_service_manager);
     VI::InstallInterfaces(*SM::g_service_manager);
 
     LOG_DEBUG(Service, "initialized OK");
diff --git a/src/core/hle/service/time/time.cpp b/src/core/hle/service/time/time.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..e3d58aa60824518d96915f1ba62e0cc7e3d109d0
--- /dev/null
+++ b/src/core/hle/service/time/time.cpp
@@ -0,0 +1,16 @@
+// Copyright 2018 yuzu emulator team
+// Licensed under GPLv2 or any later version
+// Refer to the license.txt file included.
+
+#include "core/hle/service/time/time.h"
+#include "core/hle/service/time/time_s.h"
+
+namespace Service {
+namespace Time {
+
+void InstallInterfaces(SM::ServiceManager& service_manager) {
+    std::make_shared<TimeS>()->InstallAsService(service_manager);
+}
+
+} // namespace Time
+} // namespace Service
diff --git a/src/core/hle/service/time/time.h b/src/core/hle/service/time/time.h
new file mode 100644
index 0000000000000000000000000000000000000000..7d0803e240b577e41d8aa72c74d3e503ff617b03
--- /dev/null
+++ b/src/core/hle/service/time/time.h
@@ -0,0 +1,16 @@
+// Copyright 2018 yuzu emulator team
+// Licensed under GPLv2 or any later version
+// Refer to the license.txt file included.
+
+#pragma once
+
+#include "core/hle/service/service.h"
+
+namespace Service {
+namespace Time {
+
+/// Registers all Time services with the specified service manager.
+void InstallInterfaces(SM::ServiceManager& service_manager);
+
+} // namespace Time
+} // namespace Service
diff --git a/src/core/hle/service/time/time_s.cpp b/src/core/hle/service/time/time_s.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..6b0597d8e6c01c804fe800d04192da1318d69fb1
--- /dev/null
+++ b/src/core/hle/service/time/time_s.cpp
@@ -0,0 +1,58 @@
+// Copyright 2018 yuzu emulator team
+// Licensed under GPLv2 or any later version
+// Refer to the license.txt file included.
+
+#include <chrono>
+#include "common/logging/log.h"
+#include "core/hle/ipc_helpers.h"
+#include "core/hle/kernel/client_port.h"
+#include "core/hle/kernel/client_session.h"
+#include "core/hle/service/time/time_s.h"
+
+namespace Service {
+namespace Time {
+
+class ISystemClock final : public ServiceFramework<ISystemClock> {
+public:
+    ISystemClock() : ServiceFramework("ISystemClock") {
+        static const FunctionInfo functions[] = {
+            {0, &ISystemClock::GetCurrentTime, "GetCurrentTime"},
+        };
+        RegisterHandlers(functions);
+    }
+
+private:
+    void GetCurrentTime(Kernel::HLERequestContext& ctx) {
+        const s64 time_since_epoch{std::chrono::duration_cast<std::chrono::milliseconds>(
+                                       std::chrono::system_clock::now().time_since_epoch())
+                                       .count()};
+        IPC::RequestBuilder rb{ctx, 4};
+        rb.Push(RESULT_SUCCESS);
+        rb.Push<u64>(time_since_epoch);
+        LOG_DEBUG(Service, "called");
+    }
+};
+
+void TimeS::GetStandardUserSystemClock(Kernel::HLERequestContext& ctx) {
+    auto client_port = std::make_shared<ISystemClock>()->CreatePort();
+    auto session = client_port->Connect();
+    if (session.Succeeded()) {
+        LOG_DEBUG(Service, "called, initialized ISystemClock -> session=%u",
+                  (*session)->GetObjectId());
+        IPC::RequestBuilder rb{ctx, 2, 0, 1};
+        rb.Push(RESULT_SUCCESS);
+        rb.PushMoveObjects(std::move(session).Unwrap());
+    } else {
+        UNIMPLEMENTED();
+    }
+}
+
+TimeS::TimeS() : ServiceFramework("time:s") {
+    static const FunctionInfo functions[] = {
+        {0x00000000, &TimeS::GetStandardUserSystemClock, "GetStandardUserSystemClock"},
+    };
+    RegisterHandlers(functions);
+}
+
+} // namespace Time
+} // namespace Service
diff --git a/src/core/hle/service/time/time_s.h b/src/core/hle/service/time/time_s.h
new file mode 100644
index 0000000000000000000000000000000000000000..0732279101178b37db3ef508930e45f7e59ca925
--- /dev/null
+++ b/src/core/hle/service/time/time_s.h
@@ -0,0 +1,23 @@
+// Copyright 2018 yuzu emulator team
+// Licensed under GPLv2 or any later version
+// Refer to the license.txt file included.
+
+#pragma once
+
+#include "core/hle/kernel/hle_ipc.h"
+#include "core/hle/service/service.h"
+
+namespace Service {
+namespace Time {
+
+class TimeS final : public ServiceFramework<TimeS> {
+public:
+    TimeS();
+    ~TimeS() = default;
+
+private:
+    void GetStandardUserSystemClock(Kernel::HLERequestContext& ctx);
+};
+
+} // namespace Time
+} // namespace Service