Ruby - Date et heure

le Timeclass représente les dates et heures en Ruby. Il s'agit d'une couche mince sur la fonctionnalité de date et d'heure du système fournie par le système d'exploitation. Cette classe peut être incapable sur votre système de représenter des dates antérieures à 1970 ou après 2038.

Ce chapitre vous familiarise avec tous les concepts les plus recherchés de date et d'heure.

Obtenir la date et l'heure actuelles

Voici l'exemple simple pour obtenir la date et l'heure actuelles -

#!/usr/bin/ruby -w

time1 = Time.new
puts "Current Time : " + time1.inspect

# Time.now is a synonym:
time2 = Time.now
puts "Current Time : " + time2.inspect

Cela produira le résultat suivant -

Current Time : Mon Jun 02 12:02:39 -0700 2008
Current Time : Mon Jun 02 12:02:39 -0700 2008

Obtention des composants d'une date et d'une heure

Nous pouvons utiliser l' objet Time pour obtenir divers composants de date et d'heure. Voici l'exemple montrant la même chose -

#!/usr/bin/ruby -w

time = Time.new

# Components of a Time
puts "Current Time : " + time.inspect
puts time.year    # => Year of the date 
puts time.month   # => Month of the date (1 to 12)
puts time.day     # => Day of the date (1 to 31 )
puts time.wday    # => 0: Day of week: 0 is Sunday
puts time.yday    # => 365: Day of year
puts time.hour    # => 23: 24-hour clock
puts time.min     # => 59
puts time.sec     # => 59
puts time.usec    # => 999999: microseconds
puts time.zone    # => "UTC": timezone name

Cela produira le résultat suivant -

Current Time : Mon Jun 02 12:03:08 -0700 2008
2008
6
2
1
154
12
3
8
247476
UTC

Fonctions Time.utc, Time.gm et Time.local

Ces deux fonctions peuvent être utilisées pour formater la date dans un format standard comme suit -

# July 8, 2008
Time.local(2008, 7, 8)  
# July 8, 2008, 09:10am, local time
Time.local(2008, 7, 8, 9, 10)   
# July 8, 2008, 09:10 UTC
Time.utc(2008, 7, 8, 9, 10)  
# July 8, 2008, 09:10:11 GMT (same as UTC)
Time.gm(2008, 7, 8, 9, 10, 11)

Voici l'exemple pour obtenir tous les composants d'un tableau au format suivant -

[sec,min,hour,day,month,year,wday,yday,isdst,zone]

Essayez ce qui suit -

#!/usr/bin/ruby -w

time = Time.new
values = time.to_a
p values

Cela générera le résultat suivant -

[26, 10, 12, 2, 6, 2008, 1, 154, false, "MST"]

Ce tableau peut être passé aux fonctions Time.utc ou Time.local pour obtenir un format de dates différent comme suit -

#!/usr/bin/ruby -w

time = Time.new
values = time.to_a
puts Time.utc(*values)

Cela générera le résultat suivant -

Mon Jun 02 12:15:36 UTC 2008

Voici le moyen d'obtenir le temps représenté en interne en secondes depuis l'époque (dépendante de la plate-forme) -

# Returns number of seconds since epoch
time = Time.now.to_i  

# Convert number of seconds into Time object.
Time.at(time)

# Returns second since epoch which includes microseconds
time = Time.now.to_f

Fuseaux horaires et heure d'été

Vous pouvez utiliser un objet Heure pour obtenir toutes les informations relatives aux fuseaux horaires et à l'heure d'été comme suit -

time = Time.new

# Here is the interpretation
time.zone       # => "UTC": return the timezone
time.utc_offset # => 0: UTC is 0 seconds offset from UTC
time.zone       # => "PST" (or whatever your timezone is)
time.isdst      # => false: If UTC does not have DST.
time.utc?       # => true: if t is in UTC time zone
time.localtime  # Convert to local timezone.
time.gmtime     # Convert back to UTC.
time.getlocal   # Return a new Time object in local zone
time.getutc     # Return a new Time object in UTC

Formatage des heures et des dates

Il existe différentes manières de formater la date et l'heure. Voici un exemple montrant quelques -

#!/usr/bin/ruby -w

time = Time.new
puts time.to_s
puts time.ctime
puts time.localtime
puts time.strftime("%Y-%m-%d %H:%M:%S")

Cela produira le résultat suivant -

Mon Jun 02 12:35:19 -0700 2008
Mon Jun  2 12:35:19 2008
Mon Jun 02 12:35:19 -0700 2008
2008-06-02 12:35:19

Directives de mise en forme de l'heure

Ces directives du tableau suivant sont utilisées avec la méthode Time.strftime .

N ° Sr. Directive et description
1

%a

Le nom abrégé du jour de la semaine (Sun).

2

%A

Le nom complet du jour de la semaine (dimanche).

3

%b

Le nom abrégé du mois (janvier).

4

%B

Le nom complet du mois (janvier).

5

%c

La représentation locale préférée de la date et de l'heure.

6

%d

Jour du mois (01 au 31).

sept

%H

Heure de la journée, 24 heures (00 à 23).

8

%I

Heure de la journée, horloge sur 12 heures (01 à 12).

9

%j

Jour de l'année (001 à 366).

dix

%m

Mois de l'année (01 à 12).

11

%M

Minute de l'heure (00 à 59).

12

%p

Indicateur méridien (AM ou PM).

13

%S

Seconde de la minute (00 à 60).

14

%U

Numéro de semaine de l'année en cours, en commençant par le premier dimanche comme premier jour de la première semaine (00 à 53).

15

%W

Numéro de semaine de l'année en cours, en commençant par le premier lundi comme premier jour de la première semaine (00 à 53).

16

%w

Jour de la semaine (dimanche est 0, 0 à 6).

17

%x

Représentation préférée pour la date seule, pas d'heure.

18

%X

Représentation préférée pour le temps seul, sans date.

19

%y

Année sans siècle (00 à 99).

20

%Y

Année avec siècle.

21

%Z

Nom du fuseau horaire.

22

%%

Caractère% littéral.

Arithmétique du temps

Vous pouvez effectuer une arithmétique simple avec le temps comme suit -

now = Time.now          # Current time
puts now

past = now - 10         # 10 seconds ago. Time - number => Time
puts past

future = now + 10  # 10 seconds from now Time + number => Time
puts future

diff = future - past     # => 10  Time - Time => number of seconds
puts diff

Cela produira le résultat suivant -

Thu Aug 01 20:57:05 -0700 2013
Thu Aug 01 20:56:55 -0700 2013
Thu Aug 01 20:57:15 -0700 2013
20.0