User:Haxit/Kiloseconds

From ArchWiki

The kiloseconds project is a very sophisticated and exquisite, ego-boosting and mind-blowing (albeit perhaps a bit over-engineered) project which aims to provide its audience with the time in kiloseconds, since we cannot live without it.

Please help use out by adding programming languages to our github repo [1]

Awk

#!/bin/awk -f
BEGIN {
	patsplit(strftime("%T"), t, /[0-9]{2}/)
	printf "It is %.3f kiloseconds.\n", (t[1]*3600 + t[2]*60 + t[3]) / 1000
}

Bash

Using seconds since 1970-01-01 00:00:00 UTC

echo "It's $((($(date +%s) - $(date +%s -d $(date +%x)))/1000)) kiloseconds."

Fixed invalid date bug of above ;)

echo "It's $((($(date +%s) - $(date +%s -d $(LC_ALL="C" date +%x)))/1000)) kiloseconds."

Another one, using sed

# date is only invoked once. This variant also outputs the fractional part.
eval $(echo $(($(date +"%-H*3600+%-M*60+%-S")))|sed "s/.*/echo It is \$((&\/1000)).\$((&%1000)) kiloseconds./")

Befunge-93

Befunge-93 has no way of getting the time by itself so it has to be supplied on stdin, eg $date +"%H %M %S" | befungeinterpreter ks.bf

0" si tI">:#,_$&"d$"**&"<"*+&+:"d"52**/.0" tniop">:#,_$"d"52**%v
ks.bf  @$_ #!,#:<"kiloseconds."+550.<,"0"_v#`\+55:,"0"_v#`\"d":<
Pipe date +"%H %M %S" to stdin.     ^     <            <  .:tlvb

Brainf***

[ Usage: date +"%H%M%S"|somebfinterpreter ks.bf ]

++++++++++>
>>++++[<++++++++<++++++++>>-]
++[<+++++++>-]
>+++++++++[<++++++++>-]<+
>>>>>>>>>>>>++++++++++[<++++++++++>-]                
<[<<<<<<<<<<+>+>+>+>+>+>+>+>+>+>-]
<<<<<<<<<<->>+>+++++>+++++++>++++++++
>>>>>+++++++++++++[<<<<+>+>+>+>-]<<<<--->-->++>+++
>,>,>,>,>,>,>>++++++[<++++++++>-]<[<<<<<<->->->->->->-]
<[>+<-]<[>+<-]<[>>++++++<<-]<[>>++++++<<-]
<[>>+++>++++++<<<-]<[>>+++>++++++<<<-]
>>>>>[>>+>+<<<-]>>>
[-[-[-[-[-[-[-[-[-[-<----------<<<+>>>>
[-[-[-[-[-[-[-[-[-[-<----------<<<+>>>>
[-[-[-[-[-[-[-[-[-[-<----------<<<+>>>>
[-[-[-[-[-[-[-[-[-[-<----------<<<+>>>>
[-[-[-[-[-[-[-[-[-[-<----------<<<+>>>>
[-[-[-[-[-[-[-[-[-[-<----------<<<+>>>>
]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
<[<<+>>-]
<<<[>>>+>+<<<<-]>>>>
[-[-[-[-[-[-[-[-[-[-<----------<<<<+>>>>>
[-[-[-[-[-[-[-[-[-[-<----------<<<<+>>>>>
[-[-[-[-[-[-[-[-[-[-<----------<<<<+>>>>>
[-[-[-[-[-[-[-[-[-[-<----------<<<<+>>>>>
[-[-[-[-[-[-[-[-[-[-<----------<<<<+>>>>>
[-[-[-[-[-[-[-[-[-[-<----------<<<<+>>>>>
[-[-[-[-[-[-[-[-[-[-<----------<<<<+>>>>>
[-[-[-[-[-[-[-[-[-[-<----------<<<<+>>>>>
[-[-[-[-[-[-[-[-[-[-<----------<<<<+>>>>>
]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
]]]]]]]]]]
<[<<<+>>>-]
<<<<[>>>>+>+<<<<<-]>>>>>
[-[-[-[-[-[-[-[-[-[-<----------<<<<<+>>>>>>
[-[-[-[-[-[-[-[-[-[-<----------<<<<<+>>>>>>
[-[-[-[-[-[-[-[-[-[-<----------<<<<<+>>>>>>
[-[-[-[-[-[-[-[-[-[-<----------<<<<<+>>>>>>
]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
<[<<<<+>>>>-]
>++++++[<++++++++>-]<[<<<<<+>+>+>+>+>-]
<<<<<<<<<<<<<<<<<<.>>>>>>>>>>.<<<<<<<<<<<<.>>>>>>.>>>>>.<<<<<<<<<<<.
>>>>>>>>>>>>>>>.>.<<<<<<<<<<<<<<< . >>>>>>>>>>>>>>>>.>.>.
<<<<<<<<<<<<<<<<<<<.>>>>>>>.<.>>.>>.>.<<<<<<.>>>>>.<.<<<<<.>>>>>>>.
<<<<<<<<<<<<.

C

#include <stdio.h>
#include <time.h>

int main(void)
{
     struct tm *t;
     time_t now;
     float ks;
     time(&now);
     t=localtime(&now);
     ks=(t->tm_hour*3600 + t->tm_min*60 + t->tm_sec);
     printf("it is %.2f kiloseconds\n",ks/1000);
     return 0;
}

C++

#include <iostream>
#include <ctime>
using namespace std;

int main()
{
    time_t now;
    time(&now);
    struct tm *t = localtime(&now);
    float ks = (t->tm_hour*3600 + t->tm_min*60 + t->tm_sec);
    cout << "it is " << ks/1000 << " kiloseconds" << endl;
}

C#

// mcs ks.cs && mono ks.exe
using System;
public class HelloWorld {
  static public void Main () {
    DateTime dt = DateTime.Now;
    Console.WriteLine ( Math.Round(
      (decimal)((dt.Hour * 3600 + dt.Minute * 60 + dt.Second)/1000.0),
      3).ToString());
  }
}

Clojure

(import '(java.util Calendar))

(defn kiloseconds
  "Current time in kiloseconds."
  []
  (let [calendar (Calendar/getInstance)
        hours (. calendar (get Calendar/HOUR_OF_DAY))
        minutes (. calendar (get Calendar/MINUTE))
        seconds (. calendar (get Calendar/SECOND))
        kiloseconds (/ (+ (* hours 3600) (* minutes 60) seconds) 1000)]
    (println (str "Kiloseconds: " (float kiloseconds)))))

;; call it                                                                      
(kiloseconds)

Delphi

program Kiloseconds;

{$APPTYPE CONSOLE}

uses
SysUtils;

var
h,m,s,ms: word;
begin
DecodeTime(now, h, m, s, ms);
Writeln('It is ' + FloatToStrF( (h*3600 + m*60 + s) / 1000, ffNumber, 7, 2) + ' kiloseconds.');
end.

Eiffel

class
	APPLICATION

inherit
	ARGUMENTS

create
	make

feature {NONE} -- Initialization

	make
			-- Run application.
		local
			time: TIME
			kilo_seconds: INTEGER
		do
			create time.make_now
			kilo_seconds := ((time.hour * 3600 + time.minute * 60 + time.second) / 1000).floor
			io.put_integer (kilo_seconds)
			io.new_line
		end

end

Emacs Lisp

(require 'cl)

(defun ks-from-time (seconds minutes hours)
  (/ (+ seconds (* minutes 60) (* hours 3600))1000.0))

(defun ks-time ()
  (interactive)
  (message "It's %.3f ks" (apply 'ks-from-time (subseq (decode-time) 0 3))))

(defun erc-cmd-KS ()
  (erc-send-message
   (format "It's %.3f ks" (apply 'ks-from-time (subseq (decode-time) 0 3)))))

Erlang

-module(kiloseconds).
-export([kilotime/0]).
kilotime() ->
{Hour,Minutes,Seconds} = erlang:time(),
io:format("It is ~w kiloseconds ~n", [(Hour * 3600 + Minutes * 60 + Seconds)/1000]).

Factor

USING: accessors calendar kernel math prettyprint ;
IN: kiloseconds

: kiloseconds ( -- n )
    now [ hour>> 3600 * ] [ minute>> 60 * ]
    [ second>> ] tri + + 1000 /i ;

: main ( -- )
    kiloseconds . ;

MAIN: main

Forth

With floating point division

Simple example using floating point to divide the total number of seconds with 1000:

\ This runs at least in gforth
\ $ gforth ks.fs

: kiloseconds ( -- r ) time&date 2drop drop 60 * + 60 * + s>f 1e+3 f/ ;
: printkstime ( -- ) ." It is " kiloseconds f. ." kiloseconds." cr ;

printkstime
bye

With custom printing function

Using ANS Forths 'pictured numeric output':

#! /usr/bin/gforth
: shift   ( a b --  c   ) 60 * + ; 
: seconds (     --  sec ) time&date 2drop drop shift shift ;
: .ks     ( sec --      ) s>d <# # # # '. hold #s #> type ;
." it is " seconds .ks ."  kiloseconds" cr bye 

Fortran 90/95

To 17 decimal places:

program kiloseconds
  real*8 ksec
  ksec = secnds(0.0) / 1000
  print 10, ksec
  10 format( 'It is ', F20.17, ' kiloseconds.' )
end program

Go

// 8g ks.go && 8l -o ks ks.8 && ./ks
package main
import fmt "fmt"
import "time"
func main(){
  d := time.LocalTime()
  d.Hour = 0; d.Minute = 0; d.Second = 0;
  fmt.Printf( "it is now %2.3f ks",
              float(time.LocalTime().Seconds()-d.Seconds())/1000)
}

Haskell

import Data.Time

diffTimeToKiloSeconds diffTime = realToFrac diffTime / 1000
secondsSinceMidnight = timeOfDayToTime . localTimeOfDay . zonedTimeToLocalTime
kiloSecondsSinceMidnight = diffTimeToKiloSeconds . secondsSinceMidnight

main = do localTime <- getZonedTime
          putStrLn $ "It's "
                     ++ show (kiloSecondsSinceMidnight localTime)
                     ++ " kiloseconds"

A version with fixed-width decimal output:

import Data.Time
import Numeric

diffTimeToKiloSeconds diffTime = realToFrac diffTime / 1000
secondsSinceMidnight = timeOfDayToTime . localTimeOfDay . zonedTimeToLocalTime
kiloSecondsSinceMidnight = diffTimeToKiloSeconds . secondsSinceMidnight

main = do localTime <- getZonedTime
          putStrLn $ "It's "
                     ++ showFFloat (Just 2) (kiloSecondsSinceMidnight localTime) ""
                     ++ " kiloseconds"

A version with fixed-width decimal output using printf:

import Data.Time
import Text.Printf

secondsSinceMidnight :: ZonedTime -> Double
secondsSinceMidnight = realToFrac . timeOfDayToTime . localTimeOfDay . zonedTimeToLocalTime

main = do 
   time <- getZonedTime 
   printf "%.2f\n" (secondsSinceMidnight time / 1000)

IO

Date midnight := method(self clone setHour(0) setMinute(0) setSecond(0))
Date ks       := method((self secondsSince(self midnight) / 1000) asString exSlice(0,6))
writeln("it is ", Date now ks, " kiloseconds")

Java

import java.util.GregorianCalendar;

public class Kiloseconds {

	public static void main(String[] args) {
		
		GregorianCalendar calendar = new GregorianCalendar();
		float hours, minutes, seconds, kiloseconds;
		
		hours = calendar.get(GregorianCalendar.HOUR_OF_DAY);
		minutes = calendar.get(GregorianCalendar.MINUTE);
		seconds = calendar.get(GregorianCalendar.SECOND);
		kiloseconds = (hours*3600 + minutes*60 + seconds) / 1000;
		System.out.println(kiloseconds + "\n");

	}

}

Javascript

ourDate = new Date();
metricTime =  (ourDate.getHours() * 3600 + ourDate.getMinutes() * 60 + ourDate.getSeconds());
document.write("It is: " + metricTime / 1000 + " kiloseconds.");

Lisp

(multiple-value-bind (seconds minutes hours)
   (get-decoded-time)
 (print (/ (+ seconds
              (* minutes 60)
              (* hours 3600))
           1000.0)))

LOLCODE (LOLPython)

LOLPython here

IN MAI time GIMME localtime LIKE NOW
TODAYS CAN HAZ NOW THING

KILOSECONDS CAN HAZ EASTERBUNNY
PILE CAN HAZ CHEEZBURGER

KILOSECONDS GETZ ANOTHR 3600 OF THOSE TODAYS OWN tm_hour
KILOSECONDS GETZ ANOTHR 60 OF THOSE TODAYS OWN tm_min
KILOSECONDS GETZ ANOTHR PILE OF THOSE TODAYS OWN tm_sec

VISIBLE "OMG IT'S" AND KILOSECONDS SMASHES INTO 1000.0 AND "KILOSECONDS"

Lua

Printing once

This version displays the time once

print("It is ", (os.date("%H")*3600 + os.date("%M")*60 + os.date("%S"))/1000, " kiloseconds")

Continously looping

Time is updated once per second

while true do
  io.write("\rIt is ", (os.date("%H")*3600 + os.date("%M")*60 + os.date("%S"))/1000, " kiloseconds")
  io.stdout:flush()
  os.execute("sleep 0.7")
end

Maple

with(StringTools, FormatTime):
t:= x->parse(FormatTime(x)): 
printf("It is %2.2f kiloseconds\n", (t(%H)*3600 + t(%M)*60 + t(%S))/1000); 

Mathematica

Drop[DateList[],3].{3600,60,1}/1000

MatLab

Verbose code

function ks = kiloseconds();
% make a clock
c = clock;
% get hour
hour = c(4);
% get minutes 
min = c(5);
% get seconds
sec = c(6);
ks = (hour*3600+min*60+sec)/1000;
end

Oneliner

function s=ks(); c=clock; s=sum(c(4:6).*[60^2 60 1])/1000; end

Objective-C (Cocoa)

NSDate *d = [NSDate date];
NSDateComponents *dc = [[NSCalendar currentCalendar] components:NSHourCalendarUnit|NSMinuteCalendarUnit|NSSecondCalendarUnit fromDate:d];
double ks = ([dc second] + [dc minute] * 60 + [dc hour] * 3600) / 1000.0;
NSLog(@"%.3f", ks);

OCaml

#!/usr/bin/ocaml unix.cma
open Unix;;
let t = localtime (time ()) in 
let ks = float_of_int (t.tm_sec + t.tm_min * 60 + t.tm_hour * 3600) /. 1000.0 in
Printf.printf "%.3f" ks;;

Openoffice.org's BASIC

function Kiloseconds()
       Time = Now()
       Kiloseconds = CStr((Hour(time)*3600 + Minute(time)*60 + Second(time))/1000) + " kiloseconds"
end function

Perl

#!/usr/bin/perl
($s,$m,$h) = localtime();
printf "Current time: %.3f kiloseconds.\n", ($h*3600+$m*60+$s)/1000;

PHP

<?php
list($sec, $min, $hour) = localtime(time(), false);
echo "Time is ", ($hour * 3600 + $min * 60 + $sec) / 1000, " kiloseconds\n";

PLT Scheme

(let* ([date-struct (seconds->date (current-seconds))]
       [seconds (date-second date-struct)]
       [minutes (date-minute date-struct)]
       [hours (date-hour date-struct)])
 (display (/ (+ seconds
                (* minutes 60)
                (* hours 3600))
             1000.0)))

Powershell

((Date).get_Hour()*3600 + (Date).get_Minute()*60 + (Date).get_Second())/1000

Prolog (SWI-Prolog)

#!/usr/bin/env swipl -g kiloseconds -s
kiloseconds :- 
    get_time(T), 
    stamp_date_time(T,date(_,_,_,H,M,S,_,_,_),'local'), 
    format('It is: ~f kiloseconds.~n',[(H*3600+M*60+S)/1000]).

Python

Small example

import time
tm = time.localtime()
print (tm.tm_hour*3600+tm.tm_min*60+tm.tm_sec)/1000.0, "kiloseconds"

Big example (with Ncurses)

With fancy colours and everything ./curses_clock.py -h for usage You have been warned

#!/usr/bin/env python2

import curses
import signal
import traceback
import time

import getopt, sys

DIGIT_WIDTH = 5
DIGIT_HEIGHT = 5
DIGIT_SPACING = 2

'''
_0_0_._0_0_0_
'''

width = 7*DIGIT_SPACING + 6*DIGIT_WIDTH 
height = 2*DIGIT_SPACING + DIGIT_HEIGHT


# numbers, list of coords in (y,x)

digits = [
    [
        "#####",
        "#   #",
        "#   #",
        "#   #",
        "#####"
        ],
    [
        "  #  ",
        " ##  ",
        "  #  ",
        "  #  ",
        " ### ",
        ],
    [
        "#####",
        "    #",
        "#####",
        "#    ",
        "#####",
        ],
    [
        "#####",
        "    #",
        " ####",
        "    #",
        "#####",
        ],
    [
        "#   #",
        "#   #",
        "#####",
        "    #",
        "    #",
        ],
    [
        "#####",
        "#    ",
        "#####",
        "    #",
        "#####",
        ],
    [
        "#####",
        "#    ",
        "#####",
        "#   #",
        "#####",
        ],
    [
        "#####",
        "    #",
        "    #",
        "    #",
        "    #",
        ],
    [
        "#####",
        "#   #",
        "#####",
        "#   #",
        "#####",
        ],
    [
        "#####",
        "#   #",
        "#####",
        "    #",
        "    #",
        ],
    [
        "",
        "",
        "",
        "",
        "  # ",
        ],
]

def draw_digit(win, digit, y, x):
    sections = digits[digit]
    position = 0
    for section in sections:
        xpos = x
        for char in section:
            if char == ' ':
                win.addstr(position+y, xpos, ' ', curses.color_pair(0))
            else:
                win.addstr(position+y, xpos, ' ', curses.color_pair(1))
            xpos += 1
        position += 1

def draw_time(win, digits):
    h,w = win.getmaxyx()
    x_pos = (w - width) / 2
    y_pos = (h - height) / 2
    x_pos += DIGIT_SPACING
    y_pos += 1
    digits.insert(2, 10) #add in the point
    for d in digits:
        draw_digit(win, d, y_pos, x_pos)
        x_pos += (DIGIT_SPACING + DIGIT_WIDTH)

def tick(win):
    tm = time.localtime()
    t = ks = tm.tm_hour*3600 + tm.tm_min*60 + tm.tm_sec
    a = ks/10000; ks -= a*10000
    b = ks/1000; ks -= b*1000
    c = ks/100; ks -= c*100
    d = ks/10; ks -= d*10
    e = ks
    draw_time(win, [a,b,c,d,e])
    return t
    
def draw_dots(win):
    h,w = win.getmaxyx()
    x_pos = (w - width) / 2
    y_pos = (h - height) / 2
    win.hline(y_pos,x_pos,curses.ACS_BULLET, width, curses.color_pair(2))
    win.hline(y_pos+DIGIT_HEIGHT+1,x_pos,curses.ACS_BULLET, width, curses.color_pair(2))
    win.vline(y_pos+1,x_pos,curses.ACS_BULLET, DIGIT_HEIGHT, curses.color_pair(2))
    win.vline(y_pos+1,x_pos+width-1,curses.ACS_BULLET, DIGIT_HEIGHT, curses.color_pair(2))


def init_screen():
    screen = curses.initscr()
    curses.noecho()
    curses.cbreak()
    screen.clear()
   
def main(screen, fg, bg):
    curses.curs_set(0) #hide cursor
    screen.nodelay(1) # do not wait for input

    curses.use_default_colors()

    curses.init_pair(1, fg, fg)
    curses.init_pair(2, fg, bg)

    screen.bkgd(' ', curses.color_pair(2))

    def screen_resize(*args):
        while 1:
            try: curses.endwin(); break
            except: time.sleep(1)
        screen.erase()
        draw_dots(screen)
        screen.refresh()

    signal.signal(signal.SIGWINCH, screen_resize)

    draw_dots(screen)


    t = None
    while True:
        newtime = tick(screen)
        if t != newtime:
            screen.refresh()
        t = newtime

        c = screen.getch()
        if c == ord('q'):
            break
        
        time.sleep(0.5)


def usage():
    print '''curses_clock.py [OPTION]

  -h, --help displays this help
  -f, --fg=COLORCODE sets the foreground color to COLORCODE
  -b, --bg=COLORCODE sets the background color to COLORCODE


Color codes available:
  default term fg/bg -1
  black   0
  red     1
  green   2
  yellow  3
  blue    4
  magenta 5
  cyan    6
  white   7
'''



if __name__ == '__main__':
    bg = 0
    fg = 7

    def do_color(arg):
        try:
            color = int(arg)
        except:
            color = -1
        if not -1 <= color <= 7:
            print "Color code not in correct range"
            usage()
            sys.exit(2)
        else:
            return color
            

    try:
        opts, args = getopt.getopt(sys.argv[1:], "hf:b:", ["help", "fg=", "bg="])
    except getopt.GetoptError:
        usage()
        sys.exit(2)

    for opt, arg in opts:
        if opt in ("-h", "--help"):
            usage()
            sys.exit()
        elif opt in ("-f", "--fg"):
            fg = do_color(arg)
        elif opt in ("-b", "--bg"):
            bg = do_color(arg)


    curses.wrapper(main, fg, bg)

REBOL

 REBOL [ Title: "kiloseconds" File: %ks.r ]
 f: to integer! now/time
 print f / 1000

Ruby

puts((Time.now.sec + Time.now.min*60 + Time.now.hour*3600) / 1000.0)

Scala

Could be done shorter, but this demonstrates some nice Scala features.

import java.util.Calendar

object Kilosecond {
    private implicit def enrichCalendar(c: Calendar) = new CalendarWrapper(c)

    def main(args: Array[String]) = {
        val c = Calendar.getInstance

        println("Kiloseconds: " + c.kiloseconds)
    }

    private class CalendarWrapper(c: Calendar) {
        def kiloseconds = {
            val hours = c.get(Calendar.HOUR_OF_DAY)
            val minutes = c.get(Calendar.MINUTE)
            val seconds = c.get(Calendar.SECOND)

            (hours * 3600 + minutes * 60 + seconds) / 1000.0
        }
    }
}

Sed

Large

run with sed -f ks.sed

:ck;h
    s/^[0-2][0-9] [0-5][0-9] [0-5][0-9]$//;tok
    s/.*/Supply time on stdin in a format corresponding to what date "+%H %M %S" would output/
    b
:ok;x
:s; s/^\(.. ..\) \(..\)/\1 000\2/;tm
:m; s/^.. .0/& 00000/;tm1
    s/^.. .1/& 00060/;tm1;  s/^.. .2/& 00120/;tm1;  s/^.. .3/& 00180/;tm1
    s/^.. .4/& 00240/;tm1;  s/^.. .5/& 00300/;tm1;  s/^.. .6/& 00360/;tm1
    s/^.. .7/& 00420/;tm1;  s/^.. .8/& 00480/;tm1;  s/^.. .9/& 00540/;tm1
:m1;s/^.. 0./& 00000/;th0
    s/^.. 1./& 00600/;th0;  s/^.. 2./& 01200/;th0;  s/^.. 3./& 01800/;th0;
    s/^.. 4./& 02400/;th0;  s/^.. 5./& 03000/;th0
:h0;s/^.0 ../& 00000/;th1
    s/^.1 ../& 03600/;th1;  s/^.2 ../& 07200/;th1;  s/^.3 ../& 10800/;th1
    s/^.4 ../& 14400/;th1;  s/^.5 ../& 18000/;th1;  s/^.6 ../& 21600/;th1
    s/^.7 ../& 25200/;th1;  s/^.8 ../& 28800/;th1;  s/^.9 ../& 32400/;th1
:h1;s/^0. ../00000/;tsp
    s/^1. ../36000/;tsp
    s/^2. ../72000/;tsp
:sp;s/$/|/
:d4;s/\<\(.\)\(....\>.*|.*\)/\2\1/;td4; s/$/ /
:d3;s/\<\(.\)\(...\>.*|.*\)/\2\1/;td3; s/$/ /
:d2;s/\<\(.\)\(..\>.*|.*\)/\2\1/;td2; s/$/ /
:d1;s/\<\(.\)\(.\>.*|.*\)/\2\1/;td1; s/$/ /
:d0;s/\<\(.\)\(\>.*|.*\)/\2\1/;td0; s/$/ /
:c0;s/.*|//
    s/0//g
    s/1/o/g
    s/2/oo/g
    s/3/ooo/g
    s/4/oooo/g
    s/5/ooooo/g
    s/6/oooooo/g
    s/7/ooooooo/g
    s/8/oooooooo/g
    s/9/ooooooooo/g
:+; s/\(.*\) oooooooooo\(.*\)/\1o \2/;t+
:c1;s/ooooooooo /9/g
    s/oooooooo /8/g
    s/ooooooo /7/g
    s/oooooo /6/g
    s/ooooo /5/g
    s/oooo /4/g
    s/ooo /3/g
    s/oo /2/g
    s/o /1/g
    s/ /0/g
:c2;s/\(..\)\(...\)/It is \1.\2 kiloseconds./
:zp;s/0\(.\)\./\1./

Smaller

run with sed -f ks.sed

:00;s/^[0-2][0-9] *[0-5][0-9] *[0-5][0-9]$/&/;t02
:01;s/.*/Suggestion: date "+%H %M %S" | stdin./;q
:02;s/ //g;x;s/^/5/;x;t03
:03;s/^\(|*\)0/\1/;t08;s/^\(|*\)9/\1|||||||||/;t08;
:04;s/^\(|*\)1/\1|/;t08;s/^\(|*\)8/\1||||||||/;t08;
:05;s/^\(|*\)2/\1||/;t08;s/^\(|*\)7/\1|||||||/;t08;
:06;s/^\(|*\)3/\1|||/;t08;s/^\(|*\)6/\1||||||/;t08;
:07;s/^\(|*\)4/\1||||/;t08;s/^\(|*\)5/\1|||||/;t08;
:08;x;s/0//;x;t0d;:tlvb
:09;x;s/5/4/;s/3/2/;s/1/0/;x;t0b
:0a;x;s/4/3/;s/2/1/;x;t0c
:0b;s/|/||||||||||/g;t03;b03
:0c;s/|/||||||/g;t03;b03
:0d;s/|\{10\}/{/g;s/{$/{0/;
:0e;s/{\{10\}/}/g;s/}\([|0]\)/}0\1/
:0f;s/}\{10\}/(/g;s/(\([{0]\)/(0\1/
:10;s/(\{10\}/)/g;s/)\([}0]\)/)0\1/
:11;y/|{}()/{}()+/
:12;s/+\{9\}/9/;s/+\{8\}/8/;s/+\{7\}/7/;s/+\{6\}/6/;
:13;s/+\{5\}/5/;s/+\{4\}/4/;s/+\{3\}/3/;s/+\{2\}/2/;
:14;s/+/1/;s/[|{}()]/&/;t11
:15;s/^.\{0,3\}$/0&/;t15;
:16;s/\(.*\)\(.\{3\}\)/It is \1.\2 kiloseconds./

Smalltalk

'It is ', (Time now asSeconds/1000.000) printString, ' kiloseconds'

Standard ML

open Date;
let
  val t = fromTimeLocal (Time.now ())
  val ks = real (second t + minute t * 60 + hour t * 3600) / 1000.0
in
  print (Real.fmt (StringCvt.FIX (SOME 3)) ks)
end;

Supybot

echo Today is [Math calc [echo ($YEAR * 365 + $MONTH * 12 + $DATE * 24) / 1000]] and the time is currently 
[Math calc [echo ($HOUR * 3600 + $MINUTE * 60 + $SECOND)/1000]] $TZ.

TCL

puts "It's [expr [clock format [clock seconds] -format {(%k*3600+%M.0*60+%S.0)/1000}]] kiloseconds"

Weechat Plugin

Requires weechat version 0.3.0+

kiloseconds.py

IRSSI Plugin

#!/usr/bin/perl

use vars qw($VERSION %IRSSI);
use Irssi;
use strict;
$VERSION = '0.10';
%IRSSI = (
   authors	=> 'Ben Duffield',
   contact	=> 'jebavarde AT gmail DOT com',
   name	=> 'kiloseconds',
   description	=> 'Reports the time in kiloseconds',
   license	=> 'GPL',
   url		=> 'https://wiki.archlinux.org/index.php/Kiloseconds',
   changed	=> 'no idea',
); 
 

sub cmd_kiloseconds {
    my ($data, $server, $witem) = @_;
    my $output;
    my $ks;
    my $s;
    my $m; 
    my $h;

    ($s,$m,$h) = localtime();
    $ks = ($h*3600+$m*60+$s)/1000; 

    $output = sprintf("Current time: %.3f  kiloseconds", $ks);
 

    if ($output) {
	if ($witem && ($witem->{type} eq "CHANNEL" || $witem->{type} eq "QUERY")) {
	    $witem->command("MSG ".$witem->{name}." $output");
	}
	else {
	    Irssi::print("This is not a channel/query window :b");
	}
    }
}

Irssi::command_bind('kiloseconds', 'cmd_kiloseconds');

Oracle SQL

select ((to_char(sysdate,'HH')*60*60)+(to_char(sysdate,'MM')*60)+(to_char(sysdate,'SS')))/1000 
as "Kiloseconds" from dual