Sha256: c94825e96a2a39c3aed840c5f6e69f6b5bff6fac83caff72a10f17d64ecf73f7

Contents?: true

Size: 1.95 KB

Versions: 1

Compression:

Stored size: 1.95 KB

Contents

# = General time utilities collection
#
# code: gmosx
#
# (c) 2004 Navel, all rights reserved.
# $Id: time.rb 71 2004-10-18 10:50:22Z gmosx $

require "time.rb"

module N;

# = TimeUtils
#
# === Design:
#
# Implement as a module to avoid class polution. You can
# still Ruby's advanced features to include the module in your
# class. Passing the object to act upon allows to check for nil,
# which isn't possible if you use self.
#
# === TODO:
#
# - SOS: add test units.
# - add aliases for those methods in Kernel ?
#
module TimeUtils

	NOW = Time.now
	NEVER = Time.mktime(2038)
	ZERO = Time.mktime(1972)

	# 
	#	
	def self.date_time(time)
		return nil unless time 
		return time.strftime("%d-%m-%Y %H:%M")
	end
	
	# this method calculates the days extrema given two time objects.
	# start time is the given time1 at 00:00:00
	# end time is the given time2 at 23:59:59:999
	#
	# Input:
	# - the two times (if only time1 is provided then you get an extrema
	#   of exactly one day extrema.
	#
	# Output
	# - the time range. you can get the start/end times using
	#   range methods.
	#
	def self.days_extrema(time1, time2=nil)
		time2 = time1 if (not time2.valid? Time)
		time2 = NEVER if (time2 <= time1)
		start_time = Time.self.start_of_day(time1)
		end_time = self.end_of_day(time2)
		return (start_time..end_time)
	end

	#
	# set time to start of day
	#
	def self.start_of_day(time)
		return Time.mktime(time.year, time.month, time.day, 0, 0, 0, 0)
	end

	#
	# set time to end of day
	#
	def self.end_of_day(time)
		return Time.mktime(time.year, time.month, time.day, 23, 59, 59, 999)
	end


	# returns true only if day of time is included in the
	# range (stime..etime). Only year days are checked.
	#
	def self.time_in_day_range(time, stime=ZERO, etime=NEVER)
		if (etime <= stime)
			$log.debug "Invalid end time (#{etime} < #{stime})" if $DBG
			etime = NEVER
		end

		stime = start_of_day(stime)
		etime = end_of_day(etime)

		return (stime..etime).include?(time)
	end

end

end # module

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
nitro-0.1.2 lib/n/utils/time.rb