Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

On Windows I use the PSPad editor which has a nice ALT-D timestamp which you can edit the format of, e.g. yyyy-mm-dd hh:mm:ss.

When working outside an editor, e.g. Google Docs, I have Autohotkey which I have programmed CTRL-D to insert a yyyy-mm-dd hh:mm:ss timestamp.

I am now working on a Mac mostly using TextWrangler as my editor but I can't find a timestamp hotkey in its features.

What is the easiest way to get a yyyy-mm-dd hh:mm:ss hotkey on Mac, either in a (free) text editor or a (free) autohotkey equivalent?

share|improve this question
Please comment on my answer if it doesn't work for you. – Daniel Beck Apr 24 '11 at 9:00
up vote 15 down vote accepted

One option is to use a shell script or Python/Perl/Ruby script.

One option, using Python:

#!/usr/bin/env python
import time
t = time.localtime()
# yyyy-mm-dd hh:mm:ss
print '%d-%02d-%02d %02d:%02d:%02d' % (t.tm_year, t.tm_mon, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec)

Another, shorter, by @NReilingh, using date (shell script):

date "+%Y-%m-%d %T"

Use /Applications/ to create a Service that executes this script. Add the Run Shell Script Automator action and insert the code above. Select no input in any application and replaces selected text. Then save.

It will be placed in the Services menu which is accessible from any application's menu bar by selecting the menu with the application's name. It might look something like this when you use it:

alt text

Assign keyboard shortcuts in the Keyboard preference pane in System Preferences.

alt text

The no longer free TextExpander has a feature similar to what you want. It's an application designed for snippet insertion, e.g. for partial email templates.

TextMate is an extensible, commercial editor that allows you to easily define custom commands, again in shell or scripting languages, and assign keyboard shortcuts to them.

share|improve this answer
If I do say so myself, $ date "+%Y-%m-%d %T" is a bit more compact... but I can't get either of these to work the way I want. How is one supposed to get an automator action to insert text at the current text input? – NReilingh Dec 30 '10 at 9:09
Okay, figured it out: the "Replaces selected text" up at the top MUST be checked for raw shell script output to be inserted. Damn thing took me half an hour to figure out--I was about to post an answer using AppleScript keystroke instead. Also, make sure to define "Service receives no input in any application" up at the top if you want the service to be universally accessible. – NReilingh Dec 30 '10 at 9:40
@NReilingh Sorry about that, but I was in a hurry as I posted this, with the intent to improve it once I had the chance (which is in a few minutes now). – Daniel Beck Dec 30 '10 at 10:42
I'd like to add that you must select usr/bin/env Python or something like that (the one that has Python) from the drop down menu, otherwise whatever application calls the Service script won't know to recognize that its Python, I think. At least it didn't work for me until I did that. – user119510 Feb 21 '12 at 21:29
How can I unselect the text afterwards? – schmunk Mar 17 '15 at 13:00

There's a bug in 10.7 and 10.8 where shortcuts for Automator services don't always work until the services menu has been shown from the menu bar. There's also a noticeable delay before services are run. Another option would be to assign a shortcut to a script like this:

set old to the clipboard as record
set the clipboard to (do shell script "date '+%Y-%m-%d %H:%M:%S'")
tell application "System Events" to keystroke "v" using command down
delay 0.05
set the clipboard to old

keystroke doesn't ignore held down modifier keys, so add a small delay to the start if you run the script with a shortcut that has other modifier keys than command. FastScripts waits until modifier keys are released before running scripts that contain keystroke or key code commands.

share|improve this answer
What's the purpose of Cmd-C between storing the old clipboard and setting new clipboard contents? – Daniel Beck Jun 18 '11 at 17:36
@DanielBeck Nothing, thanks for pointing it out. – user495470 Jun 19 '11 at 8:47
Using the clipboard is a mess, particularly if the user is using ClipMenu or something similar. – Dan Rosenstark Dec 22 '12 at 23:07
@Yar Alfred ignores "transient" clipboards, and keystroke doesn't know how to insert colons with my keyboard layout (but it's a bit of an edge case). keystroke might be better for inserting short ASCII-only strings like this though. – user495470 Dec 23 '12 at 10:00
Whew just checked with Spanish, thought maybe my Applescript wouldn't work. Glad it's ok, sorry that certain languages aren't given the same precedence. This is why scripting is so much more annoying than programming ;) Will check into using AlfredApp for that. They probably deserve the $$$ – Dan Rosenstark Dec 23 '12 at 14:45

Lauri's solution is way more elegant than mine, but here's my AppleScript-only solution. Is it faster than running through the clipboard and using a shell script? Maybe.

Anyway: There are a lot of solutions to get it assigned to a key, but I've found that the easiest is Quicksilver Spark. Spark can just use the scpt directly, which is what the AppleScript solution saves.

Date and Timestamp Trigger in OSX

        -- yar2050 (Dan Rosenstark)'s favorite date format 
        -- 2012 (2012-12-17 13:53)
        on fillInZero(int)
            if (int < 10) then set int to "0" & int
            return int as string
        end fillInZero

        set theDate to (current date)
        set theHour to fillInZero(hours of (theDate) as integer)
        set theMinutes to fillInZero(minutes of (theDate) as integer)
        tell theDate to get (it's month as integer)
        set theMonth to fillInZero(result)
        set theDay to fillInZero(day of theDate)
        tell (theDate) to get (it's year as integer) & "-" & (theMonth) & "-" & theDay & " " & (theHour) & ":" & theMinutes
        set date_ to (result as string)
        tell application "System Events"
            set frontmostApplication to name of the first process whose frontmost is true
        end tell
        tell application frontmostApplication
            delay 0.2 -- I have no idea why this is necessary
            tell application "System Events"
                keystroke date_
            end tell
        end tell
share|improve this answer

You can install a Freeware add-on called WordService that adds this functionality as a service, for which you can assign a keyboard shortcut in System Preferences -> Keyboard -> Shortcuts.

Here is an article about it from Mac OSX Tips -

Download from or from App Store

share|improve this answer

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .