A curated list of awesome Swatch Internet Time libraries, software and resources.
Contributions like pull requests, issues and discussion are welcome :-)
- Official, Basic Info
- Web Clocks and Converters
- Community
- Physical Clocks and Watches
- Smart Watches
- Mobile
- Operating Systems
- Applications
- Programming Languages, Libraries
- Method of Calculation
- Discussions
- News Articles
- Related
- Swatch Internet Time webpage - it has a funny video about an important gotcha with Internet Time: Because it is the same time everywhere does not mean that they are in the same place of their day/night cycle.
- Wikipedia
- It seems that Charly Alberti invented the idea as I-Time for "Internet Time", sent it to Swatch as a business proposal and they made "Swatch Internet Time" out of it a few months later. (Newspaper article, Charly Alberti commenting on it in comments section, Miami New Times article). The website for it was www.i-time.com and was online from 1998 to 2001.
- internet-ti.me
- meeting aid via URL for non-beat users: https://internet-ti.me/@610 -- directly shows time in local time and world time zones, generates metadata for embedding into social media
- also has a converter
- source code - By Jessica Stokes.
- beats.wiki
- clock re-calculates precisely, ie. at correct sub-second interval
- updates the HTML title, so you get time in browser tab title
- has a meeting aid via URL: https://beats.wiki/2021-08-06@31.94
- swatchclock.com
- gwil.co
- with links to some implementations
- CSGNetwork converter and display
Userscript for patching into your webbrowser:
- on Reddit
- GitHub Discussion here on the repo
- Github projects with tag "swatch-internet-time"
- Github projects with tag "internet-time"
The Original Swatch Net Time Watches:
- Swatch does not sell them any more.
- search for Swatch Originals .Beat Net Time SQN101
Physical clocks:
- Round self-made clock by Roni Bandini, reported on Hackaday, with comments from Charly Alberti (source code, project details, with newspaper article about Charly Alberti's iTime)
- Apple Watch: internet-beat by Jessica Stokes
- Android und Galaxy Watch: by derfreimann
- with estimated total number of installs
- GitHub search for watch face internet time beats
- Pebble watch: watch faces on GitHub
- getpebble.com redirects to fitbit.com, so it seems Pebble has been bought by Fitbit
- in-VR clock - Written in JavaScript.
- Android: by cbateman as a handy widget for the home screen
- Android: by mirk0dex as a regular app it seems
- iPhone: beat-internet-time
- iOS and Apple Watch: NetTime by Simon Rice
MacOS:
- dotbeat and dotbeat developer repository
- Dashboard widget from macupdate
- little menu extension which displays a constant readout
- can also use the Yahoo Widgets (available for Windows and and MacOS), see links below in Windows list
Windows:
- Beat-Time
- using Yahoo Widgets - there are multiple widgets available: [1] [2] [3] [4] [5]
- TheBeat - for any systray
- Beware with dual-booting with other OSes that Windows sets the hardware clock in your computer to local time, so if you have it set to UTC in other OS, this will get overwritten and/or produce false time display.
Linux GNOME:
- clock Override
- would be best solution since it can do @ time already
- but it is necessary to fix it for Gnome v40+, author is not happy with performance on v40+ but it is possible
- date menu formatter
- works for Gnome v40+ but has no @time
- Modification for @time with help of code snippet from this function in clock-override extension, bit of a hack:
editor ~/.local/share/gnome-shell/extensions/date-menu-formatter@marcinjakubowski.github.com/extension.js
- Add import and timezone at top (note that date-menu-formatter uses an other date system for the other date formats, todo):
const GLib = imports.gi.GLib; let bmttz = GLib.TimeZone.new('+01');
- Add beat time display in
update()
:If you want to add UTC display as well:setText(Utils.convertFromPattern(this._formatter.format(PATTERN, new Date())) + " @" + this.formatBeatTime());
If you want the ISO 8601 calendar week as well:var now = new Date(); var utc = new Date(now.getTime() + now.getTimezoneOffset() * 60000); setText( Utils.convertFromPattern(this._formatter.format(PATTERN, now)) + " @" + this.formatBeatTime() + " Z" + Utils.convertFromPattern(this._formatter.format('kk:mm', utc)) );
...and add function for ISO8601 calendar week at the top from the sourcevar now = new Date(); var utc = new Date(now.getTime() + now.getTimezoneOffset() * 60000); setText( Utils.convertFromPattern(this._formatter.format(PATTERN, now)) + " @" + this.formatBeatTime() + " Z" + Utils.convertFromPattern(this._formatter.format('kk:mm', utc)) + " W" + now.getWeekNumber() );
- Add function below:
formatBeatTime() { var bmtnow = GLib.DateTime.new_now(bmttz); var beat_time = 0 | ( bmtnow.get_second() + ((bmtnow.get_minute() * 60) + (bmtnow.get_hour() * 3600)) ) / 86.4; return ('000' + beat_time).slice(-3); }
- Test change without rebooting:
dbus-run-session -- gnome-shell --nested --wayland
- Restart GNOME shell by pressing Alt+F2 and enter "r" for restart (all windows remain open as they were).
- internet-time-applet by themactep - from 2013, probably only for older GNOME as newer GNOME uses Javascript for its applets.
- mod for native clock-applet from 2009 probably also only for older GNOME
Linux KDE:
- Suggestion to use conky desktop widgets (link) but not sure if there is a ready-made clock showing .beats
- The Modern Clock widget seems popular, and it looks very promising to modify the source code:
- adding "UTC" time in addition to "Local" should be possible
- then add calculation and display in main.qml here
- TODO add copy-paste version for easy use
Linux Wayland via Waybar (applies to all distributions):
DWM window manager for Linux, BSD etc.:
- Slack Bot und slash command - Written in Rust.
- Discord on on GitHub using a Bot
- emacs
- TODO Thunderbird
- TODO Outlook
- Google Sheets:
- Set the timezone of the Sheet to UTC = "GMT +0 (no daylight savings time" in File - Properties. (As of 2024-12, there is no function to get
NOW()
time in a specific time zone; all times are based on the time zone set in the sheet properties.) - In A1, add
=NOW()
- Somewhere else, enter
=MOD( ( HOUR(A1) * 3600 + MINUTE(A1) * 60 + SECOND(A1) + 3600) / 86.4, 1000)
- If your language or region setting uses comma as decimal separator, the formula is
=MOD( ( HOUR(A1) * 3600 + MINUTE(A1) * 60 + SECOND(A1) + 3600) / 86,4; 1000)
- This formula automatically adds +1 one for the UTC+1 basis of Swatch Internet Time.
- Set the timezone of the Sheet to UTC = "GMT +0 (no daylight savings time" in File - Properties. (As of 2024-12, there is no function to get
- Chrome extension by Captain from Agora Road (see Discussion section)
Project listings:
- GitHub topic swatch-internet-time
- GitHub topic internet-time
- Gitlab and Sourcehut provided 0 results as of 2024-01
Rust:
- on GitHub
- beats crate
- gil_beats by Gil Desmarais
- algorithm is unefficient
- daph/beats
Go:
C:
- beats by j0hax - Also with links to other C implementations.
- by llillilll from Agora Road (see Discussion section) - usable for status bar
- by ShrapnelNet from Agora Road (see Discussion section)
- by ColdFusion8100 resp. Captain from Agora Road (see Discussion section)
- TODO coreutils formatter %@ ? date tool? glibc? -- date(1) uses
fprintftime()
and this again usesstrftime()
from glibc.
Shell script:
- The script is so trivial, I show it here directly:
$ printf "@$(( ( ( ( $(date "+%s") + 3600 ) % 86400 ) * 10 ) / 864 ))\n"
JavaScript:
- beats by azappa
- by waffle on Agora Road (see Discussion section)
- by Punp on Agora Road (see Discussion section
- by the mactep
TypeScript and React:
Python:
- code snippet
- SwatchTime by Henry Malinowski
- AmigaOS 1.x Workbench clock in PyGame
- toys by 153
- by Fauxx from Agora Road (see Discussion section)
PHP:
- in standard library - using the DateTime format "B"
C#:
Elixir:
Typescript:
- dot-beat-time
- use-beat-time - For React apps.
Java:
Kotlin and Android:
Perl:
- DateTime::Complete - With module IBeat.
- DateTime::Format::Builder::Parsers::Quick - For parsing.
Emacs Elisp:
GoDotScript:
- Get time
now
either in UTC or UTC+1 where Biel is located. Re-use the timezone object since it will not change. Getting UTC is usually easy, then simply add+1
to the hour part in the calculations below. - Method using seconds as basis using multiplication. On x86, multiplication is faster than division and floating point division is faster than integer division.
beats = ( now.get_second() + ((now.get_minute() * 60) + ((now.get_hour() + 0) * 3600)) ) / 86.4
- Method using hour as basis using division:
beats = (now.get_hour() + (now.get_minute() / 60) + now.get_second() / 3600) * 1000 / 24
- Method using some form of "time since midnight" in UTC+1. For example, if this is efficient to acquire:
unixutc = time(NULL); # unix time is always UTC, so add 1 hour unixbmt = unixutc + 3600; # get seconds since midnight secsincemidnight = unixbmt % 86400; beats = secsincemidnight / 86.4;
- Any more?
Interval of calculation:
- The correct interval is every full beat or every 0.1 or 0.01 beats, depending on the displayed accuracy. This is slightly faster than 1 second update intervals, but not always possible to realize.
- Calculating the precise beat time, but updating the display every second or every minute. This is often the easy method when doing modifications of existing clock apps or system clock displays. When re-calculating every second, the beat value display will have numeric gaps and jump over a digit in the 0.01 precision = 2nd sub-decimal digit about every 8 to 9 seconds.
- Discussion on c2wiki
- Fifth World wiki - what is a Fifth World country
- on TimeAndDate
- by Sandra - original at gemini://idiomdrottning.org/beat-time
- Agora Road Forum - with some implementations and links to various implementations (last update into this list on 2025-01-05, Captain API and ShrapnetNet API links were broken)
- Hackerspaces.org Wiki (last update into this list on 2025-01-05)
Advantage:
- Worldwide synchronized clocks.
Disadvantage:
- Cannot easily deduce if somebody is awake at that time or not. Then again,
- they don't have to accept the meeting invitation for that time. OTOH, avoid meetings anyway.
- There is often times an online status function in internet communications platforms and telephone systems these days have a DND function when not available for calls.
- There is UTC.
Limitations:
- The Earth will always go around the sun. Meaning, it will never be physically day or night everywhere at the sime time. There will always be two choices:
- Favoring the local day/night and roughly following the biological cycle but having to calculate for worldwide coordination or
- favoring easy worldwide coordination without calculations, as in the case of Internet Time, but requiring to take care of the availability of others, which in today's networked systems is easy to do.
- ZDnet from 2000 - Also with sales data (2M devices in first 2 years, time converter downloaded over 5 million times in first 2 years).
- How stuff works
- Baltimore Sun article from 1999
- Vice 2015
- academic dict
- CNN 1999
- Github projects with tag "decimal-time"
- Github projects with tag "metric-time"
- New Earth Time - Based on 360 degrees per day. So un-decimal.
- Using UTC as basis for Internet Time instead of UTC+1 ("BMT").
- UTC iself.
- beatTAI - instead of UTC+1 ("BMT"), uses International Atomic Time (TAI) which is UTC but monotonic, meaning without any added leap seconds. Format is ":xxx.xx" so just ":" instead of "@", which should combine nicely with ISO 8601 date format like so, "YYYY-MM-DD:xxx.xx". Has implementations in some programming languages and method of calculation for easy reference. Even though the TAI atomic time is the basis of UTC and available at the level of NTP, it is not as easily available in programming languages, compared to UTC.