summaryrefslogtreecommitdiff
path: root/cli/util/time.rs
diff options
context:
space:
mode:
authorDivy Srivastava <dj.srivastava23@gmail.com>2023-03-15 12:44:22 +0530
committerGitHub <noreply@github.com>2023-03-15 07:14:22 +0000
commit51649272bd388f14685a47cfe805bd9cdb602240 (patch)
tree86be1cd73d9c7a0d095d5ca82fc4fa756fe45b65 /cli/util/time.rs
parent6f9c0a9b7a4afd0d73ab312347427e445c67f6c9 (diff)
perf: do not depend on iana-time-zone (#18088)
Chrono's `clock` feature pulls in `iana-time-zone` which links to macOS core_foundation. This PR itself is not enough to get rid of CoreFoundation. Removal depends on getting rid of security framework, see #18071
Diffstat (limited to 'cli/util/time.rs')
-rw-r--r--cli/util/time.rs22
1 files changed, 22 insertions, 0 deletions
diff --git a/cli/util/time.rs b/cli/util/time.rs
new file mode 100644
index 000000000..9c5b48b57
--- /dev/null
+++ b/cli/util/time.rs
@@ -0,0 +1,22 @@
+// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
+
+/// Identical to chrono::Utc::now() but without the system "clock"
+/// feature flag.
+///
+/// The "clock" feature flag pulls in the "iana-time-zone" crate
+/// which links to macOS's "CoreFoundation" framework which increases
+/// startup time for the CLI.
+///
+/// You can simply include this file in your project using
+/// `include!("path/to/cli/util/time.rs"))` and use it
+/// as a drop-in replacement for chrono::Utc::now().
+pub fn utc_now() -> chrono::DateTime<chrono::Utc> {
+ let now = std::time::SystemTime::now()
+ .duration_since(std::time::UNIX_EPOCH)
+ .expect("system time before Unix epoch");
+ let naive = chrono::NaiveDateTime::from_timestamp(
+ now.as_secs() as i64,
+ now.subsec_nanos(),
+ );
+ chrono::DateTime::from_utc(naive, chrono::Utc)
+}