Source: Scratch Wiki en français


Temps


Scratch propose quelques blocs de valeur permettant de manipuler des grandeurs liées au temps.

Ce tutoriel propose d'implémenter plusieurs blocs personnalisés permettant de travailler plus aisément avec le temps.

Horodatage

L'horodatage (en anglais "timestamp") est une grandeur consistant à associer à une donnée numérique une date ou un événement.

La plus courante, aussi nommée horodatage par excès, est l'heure Unix (du système du même nom)

définir Horodatage
mettre [temps v] à ( [plancher v] de ( ( (jours depuis 2000) + [10957] ) * [86400] ) )

Millisecondes

Il n'existe pas directement de bloc ([milliseconde v] actuelle :: capteurs) ; l'implémentation proposée est alignée avec l'écoulement des secondes.

définir Milliseconde
mettre [temps v] à ( [plancher v] de ( ( (jours depuis 2000) * [86400000] ) mod [1000] ) )

Utilitaires

définir année bissextile (année)
mettre [temps v] à < < ( (année) mod [400] ) = [0] > ou < < ( (année) mod [4] ) = [0] > et < non < ( (année) mod [100] ) = [0] > > > >

Conversions

définir jours depuis 2000 (t) vers date
si <(t) = []> alors 

    jours depuis 2000 (jours depuis 2000) vers date
    stop [ce script v]

fin
supprimer tous les éléments de la liste [date v]
ajouter [2000] à [date v]:: list
ajouter [1] à [date v]:: list
ajouter [1] à [date v]:: list
ajouter [0] à [date v]:: list
ajouter [0] à [date v]:: list
ajouter [0] à [date v]:: list
si <(t) = [0]> alors
    stop [ce script v]
fin
ajouter (<(t) > [0]> - <(t) < [0]>) à [date v]:: list
mettre [temps.tmp v] à [0]
répéter jusqu'à ce que < non < ( ([abs v] de (t)) - (temps.tmp)) > [0] > >

    si < non < (temps.tmp) = [0] > > alors
    
        remplacer l'élément [1] de la liste [date v] par ((élément [1] de [date v]) + (élément [7] de [date v]))
    
    fin
    année bissextile (élément [1] de [date v]) :: custom
    si < (temps) = [1] > alors
    
        mettre [temps v] à (temps.tmp)
        ajouter [366] à [temps.tmp v]
    
    sinon
    
        mettre [temps v] à (temps.tmp)
        ajouter [365] à [temps.tmp v]
    
    fin

fin
si <(t) > [0]> alors
    
    mettre [temps.tmp v] à ((t) - (temps))
    
sinon
    
    mettre [temps.tmp v] à ((t) + (temps.tmp))
    remplacer l'élément [1] de la liste [date v] par ((élément [1] de [date v]) - (1))
    
fin
remplacer l'élément [7] de la liste [date v] par [1]
répéter jusqu'à ce que <(élément [7] de [date v]) > [11] >
    
    mettre [temps v] à (élément [7] de [date v])
    si <<(temps) = [4]> ou <<(temps) = [6]> ou <<(temps) = [9]> ou <(temps) = [11]>>>> alors
    
        si < (temps.tmp) > [30] > alors
            
            ajouter [-30] à [temps.tmp v]
            remplacer l'élément [2] de la liste [date v] par ((élément [2] de [date v]) + (1))
            
        sinon
            
            remplacer l'élément [7] de la liste [date v] par [12]
            
        fin
    
    sinon
        
        si <(temps) = [2]> alors
            
            année bissextile (élément [1] de [date v]) :: custom
            si < (temps.tmp) > ([28] + (temps)) > alors
            
                ajouter ([-28] - (temps)) à [temps.tmp v]
                remplacer l'élément [2] de la liste [date v] par ((élément [2] de [date v]) + (1))
            
            sinon
            
                remplacer l'élément [7] de la liste [date v] par [12]
            
            fin
            
        sinon
            
            si < (temps.tmp) > [31] > alors
            
                ajouter [-31] à [temps.tmp v]
                remplacer l'élément [2] de la liste [date v] par ((élément [2] de [date v]) + (1))
            
            sinon
            
                remplacer l'élément [7] de la liste [date v] par [12]
            
            fin
                
        fin
        
    fin
    remplacer l'élément [7] de la liste [date v] par ((élément [7] de [date v]) + (1))
    
fin
supprimer l'élément [7] de [date v]
remplacer l'élément [3] de la liste [date v] par ([plancher v] de (temps.tmp))
mettre [temps.tmp v] à ([24] * ((temps.tmp) mod [1]))
remplacer l'élément [4] de la liste [date v] par ([plancher v] de (temps.tmp))
mettre [temps.tmp v] à ([60] * ((temps.tmp) mod [1]))
remplacer l'élément [5] de la liste [date v] par ([plancher v] de (temps.tmp))
mettre [temps.tmp v] à ([60] * ((temps.tmp) mod [1]))
remplacer l'élément [6] de la liste [date v] par ([plancher v] de (temps.tmp))
mettre [temps.tmp v] à [0]
mettre [temps v] à [date convertie]
définir date (a) (m) (j) (h) (min) (s) vers jours depuis 2000

Fuseau horaire


Voir aussi

Cet article fait partie de la catégorie des tutos
Tous les articles de cette catégorie :