view core/src/luan/modules/Time.luan @ 503:92c3d22745b8

make _ENV optional
author Franklin Schmidt <fschmidt@gmail.com>
date Wed, 20 May 2015 23:24:46 -0600
parents 7f7708e8fdd4
children fa281ee942c8
line wrap: on
line source

-- incomplete, will add as needed

java()
local Luan = require "luan:Luan"
local ipairs = Luan.ipairs
local error = Luan.error
local Table = require "luan:Table"
local System = require "java:java.lang.System"
local Calendar = require "java:java.util.Calendar"
local Date = require "java:java.util.Date"
local TimeZone = require "java:java.util.TimeZone"
local SimpleDateFormat = require "java:java.text.SimpleDateFormat"

local M = {}

function M.now()
	return System.currentTimeMillis()
end

-- add more as needed
local fields = {
	year = Calendar.YEAR;
	month = Calendar.MONTH;
	day_of_month = Calendar.DAY_OF_MONTH;
}

function M.get( time, ... )
	local cal = Calendar.getInstance()
	cal.setTimeInMillis(time)
	local rtn = {}
	for i, v in ipairs{...} do
		local fld = fields[v.lower()]
		fld or error("invalid field: "+v)
		local n = cal.get(fld)
		if fld == "month" then
			n = n + 1
		end
		rtn[i] = n
	end
	return Table.unpack(rtn)
end

function M.format(time,pattern)
	pattern = pattern or "yyyy-MM-dd HH:m:ss"
	return SimpleDateFormat.new(pattern).format(Date.new(time))
end

function M.on( year, month, day, hour, minute, second, millis )
	month = month - 1
	local cal = Calendar.getInstance()
	cal.setLenient(false)
	cal.set( year, month, day, hour or 0, minute or 0, second or 0 )
	cal.set( Calendar.MILLISECOND, millis or 0 )
	return cal.getTimeInMillis()
end

function M.period( days, hours, minutes, seconds, millis )
	local cal = Calendar.getInstance()
	cal.setTimeZone(TimeZone.getTimeZone("GMT"))
	days = days + 1
	cal.set( 1970, 0, days, hours or 0, minutes or 0, seconds or 0 )
	cal.set( Calendar.MILLISECOND, millis or 0 )
	return cal.getTimeInMillis()
end

function M.parse( pattern, source )
	return SimpleDateFormat.new(pattern).parse(source).getTime()
end

return M