15

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?

Daniel Beck
  • 111,893

5 Answers5

19

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/Automator.app 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.

Daniel Beck
  • 111,893
4

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.

Lri
  • 42,502
  • 8
  • 126
  • 159
1

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 SparkFastScripts. 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 
-- 2017-08-03 update
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 (its month as integer)
set theMonth to fillInZero(result)
set theDay to fillInZero(day of theDate)
tell (theDate) to get (its 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
    activate
    tell application "System Events"
        if (frontmostApplication = "Evernote") then
            keystroke "h" using {command down, shift down}
            keystroke "b" using {command down}
            keystroke date_
            keystroke "b" using {command down}
        else
            keystroke date_
        end if
    end tell
end tell
1

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 - http://www.macosxtips.co.uk/index_files/automatically-insert-date-and-time.php

Download from http://www.devontechnologies.com/download/products.html or from App Store http://appstore.com/mac/wordservice

Motin
  • 1,125
0

As an update to this question, users of OS X El Capitan might find the following AppleScript useful.

set the clipboard to (do shell script "date +%Y-%m-%d\" \"%H:%M:%S")
tell application "System Events"
    keystroke "v" using command down
end tell

Users can create a Run AppleScript workflow as described in the above answer by @daniel-beck. The example I created is shown below:

screenshot of applescript in automator

Jerry
  • 129