Dátum és idő

Bevezetés
Egy DateTime objektum létrehozása
Időzónák
Metódus összefoglaló
Objektumlétrehozási metódusok
Lekérő metódus
Beállító metódus
Időzóna metódusok
Összehasonlító operátorok és metódusok
Elavult Kernel::System::Time csomag

Az OTRS saját csomaggal érkezik a dátum és idő kezeléséhez, amely a dátum és idő helyes kiszámítását és tárolását biztosítja.

Bevezetés

A dátum és idő egy Kernel::System::DateTime objektummal van ábrázolva. Minden DateTime objektum tartalmazza a saját dátumát, idejét és időzóna információját. A mostanra elavult Kernel::System::Time csomaggal szemben ez azt jelenti, hogy létrehozhat és létre kell hoznia egy DateTime objektumot minden egyes dátumhoz vagy időhöz, amelyet használni szeretne.

Egy DateTime objektum létrehozása

Az OTRS objektumkezelője kibővítésre került egy Create metódussal, hogy támogassa azokat a csomagokat, amelyekhez egynél több példány hozható létre:

my $DateTimeObject = $Kernel::OM->Create(
    'Kernel::System::DateTime',
    ObjectParams => {
        TimeZone => 'Europe/Budapest'
    },
);
            

A fenti példa létrehoz egy DateTime objektumot a jelenlegi dátumhoz és időhöz az Európa/Berlin időzónában. További lehetőségek is vannak egy DateTime objektum létrehozására (időösszetevők, szövegek, időbélyegek, klónozás), nézze meg a Kernel::System::DateTime POD-ját.

Megjegyzés

Hibát fog kapni, ha megpróbál egy DateTime objektumot lekérni a $Kernel::OM->Get('Kernel::System::DateTime') használatával.

Időzónák

Az órákban lévő időeltolások (+2, -10, stb.) le lettek cserélve az időzónákkal (Európa/Berlin, Amerika/New_York, stb.). Az időzónák közti átalakítások teljes mértékben a DateTime objektumon belül vannak megvalósítva. Ha egy másik időzónára szeretne átalakítani, akkor egyszerűen használja a következő kódot:

$DateTimeObject->ToTimeZone( TimeZone => 'Europe/Budapest' );
            

Van egy új OTRSTimeZone rendszerbeállítási lehetőség. Ez a beállítás határozza meg azt az időzónát, amelyet az OTRS belsőleg használ a dátum és az idő tárolásához az adatbázison belül.

Megjegyzés

Biztosítania kell, hogy egy DateTime objektum át legyen alakítva az OTRS időzónájára, mielőtt az eltárolásra kerülne az adatbázisba (van egy kényelmes módszer erre: ToOTRSTimeZone()). Kivétel lehet, hogy ha kifejezetten egy olyan adatbázisoszlopot szeretne, amely egy dátum/idő értéket tárol egy bizonyos időzónában. Ne feledje azonban, hogy maga az adatbázis önmagában nem fog időzóna-információkat biztosítani, amikor lekérik azt.

Megjegyzés

A Kernel::System::DateTime TimeZoneList() metódusa biztosítja az elérhető időzónák listáját.

Metódus összefoglaló

A Kernel::System::DateTime csomag biztosítja a következő metódusokat (ez csak egy kiválasztás, a részletekért nézze meg a forráskódot).

Objektumlétrehozási metódusok

Egy DateTime objektum létrehozható az objektumkezelő Create() metódusával vagy egy másik DateTime objektum leklónozásával a Clone() metódusának használatával.

Lekérő metódus

A Get() metódussal egy DateTime objektum összes adata vissza lesz adva kivonatként (dátum és idő összetevők, beleértve a nap nevét, stb., valamint az időzónát).

Beállító metódus

A Set() metódussal megváltoztathatja a DateTime objektum bizonyos összetevőit (év, hónap, nap, óra, perc, másodperc) vagy beállíthat egy dátumot és időt egy adott szöveg alapján ('2016-05-24 23:04:12'). Ne feledje, hogy nem tudja megváltoztatni az időzónát ezzel a metódussal.

Időzóna metódusok

Egy DateTime objektum időzónájának megváltoztatásához használja a ToTimeZone() metódust vagy egyszerűsítésként a ToOTRSTimeZone() metódust az OTRS időzóna átalakításához.

A beállított OTRS időzóna vagy a felhasználó alapértelmezett időzónájának lekéréséhez mindig az OTRSTimeZoneGet() vagy a UserDefaultTimeZoneGet() metódusokat használja. Sose kérje le ezeket kézzel a Kernel::Config használatával.

Összehasonlító operátorok és metódusok

A Kernel::System::DateTime operátortúlterhelést használ az összehasonlításhoz. Így egyszerűen összehasonlíthat két DateTime objektumot a <, <=, ==, !=, >= and > operátorokkal. A Compare() metódus használható a Perl rendezési környezetében, mivel -1, 0 vagy 1 a visszatérési értéke.

Elavult Kernel::System::Time csomag

A mostanra elavult Kernel::System::Time csomag ki lett bővítve, hogy teljesen támogassa az időzónákat az időeltolások helyett. Ez azért történt, hogy biztosítsa a meglévő kód működését (nagyobb) módosítások nélkül.

Azonban van egy eset, amikor meg kell változtatnia a meglévő kódot. Ha olyan kódja van, amely a régi időeltolásokat használja egy új dátum és idő kiszámításához vagy különbségéhez, akkor át kell költöztetnie ezt a kódot, hogy az új DateTime objektumot használja.

Példa (régi kód):

# Feltételezzünk egy 0 időeltolást ennél az objektumnál.
my $TimeObject     = $Kernel::OM->Get('Kernel::System::Time');
my $SystemTime     = $TimeObject->TimeStamp2SystemTime( String => '2004-08-14 22:45:00' );
# Általában beállításon vagy paraméteren keresztül van lekérve.
my $UserTimeZone   = '+2';
my $UserSystemTime = $SystemTime + $UserTimeZone * 3600;
my $UserTimeStamp  = $TimeObject->SystemTime2TimeStamp( SystemTime => $UserSystemTime );
            

Példa (új kód):

# Ez hallgatólagosan beállítja a beállított OTRS időzónát.
my $DateTimeObject = $Kernel::OM->Create('Kernel::System::DateTime');
# Általában beállításon vagy paraméteren keresztül van lekérve.
my $UserTimeZone   = 'Europe/Berlin';
$DateTimeObject->ToTimeZone( TimeZone => $UserTimeZone );
# Ne feledje, hogy az epoch független az időzónától, mindig az UTC-hez lesz kiszámítva.
my $SystemTime    = $DateTimeObject->ToEpoch();
my $UserTimeStamp = $DateTimeObject->ToString();