The UNIX and Linux Forums  


Go Back   UNIX og Linux Forums > Top Forums > UNIX for Dummies Spørsmål og svar > Svar på vanlige spørsmål > Tips og Tutorials
.
google unix.com



Tips og Tutorials Nyttige artikler fra våre brukere.

Mer UNIX og Linux Forum Emner Du kan finne nyttig
Tråd Tråd startet Forum Svar Siste innlegg
Forstå dette Makefile the_learner High Level Programmering 5 06-14-2007 02:55
Trenger du hjelp forstå et Unix-kommando chris86 UNIX for Dummies Spørsmål og svar 6 10-10-2006 04:35
Litt hjelp forståelse FIFOs? deckard Linux 0 11-01-2005 01:46
trenger mer forståelse av init.d jigarlakhani UNIX for Advanced & ekspertbrukere 1 09-20-2002 04:11

 
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Thread Tools Søk i denne tråden Rate Thread Visningsmoduser
  #1 (permalink)  
Old 02-20-2007
Perderabo's Avatar
Perderabo Perderabo is offline Forum Staff  
Unix Daemon
  
 

Bli Dato: Aug 2001
Beliggenhet: Ashburn, Virginia
Innlegg: 9128
Forståelse Unix Timekeeping

Intern Time
Internt opprettholder et Unix-system tid som antall sekunder siden Unix Epoch. Unix Epoch ble ved midnatt 1 januar 1970 UTC. I den østlige tidssone i USA som var den 31 desember 1969 kl 19:00. Som jeg starte denne artikkelen, er tiden 1171733878. Jeg bruker NTP (Network Time Protocol) for å holde datamaskinen min klokke synkronisert. Så på eksakt øyeblikk at datamaskinen min syntes det var 1171733878, sannsynligvis det gjorde ditt. Enhver computer burde være enige om hva klokken er. Det spiller ingen rolle i hvilken tidssone datamaskinen bor eller i hvilken tidssone du bor. Hvis jeg hadde skrevet til en fil i løpet av den andre, ville Unix har registrert endringstid som 1171733878.

Unix tiden var tradisjonelt et signert 32-bits heltall. Det betyr at maksimal tid er 2147483647, som ville i Eastern TimeZone av USA være 18 januar 2038 kl 22:14:07. Planen er at dette utvides til et 64 bits heltall før da. Unix sekunder teller frem én etter én. Etter 1171733878, neste sekund som meg system vil vite om er 1171733879. Når den er syncronized arbeider NTP ved å forkorte eller forlenge et sekund. Jeg kan få tak i tid ved å ringe systemet samtaletid (). Hvis jeg vil ha noe bedre enn sekunder, er det neste mest nøyaktige grensesnitt systemet kaller ganger (). ganger () Hovedformålet er å få en struktur av data om systemet behandling. Men returkoden er også nyttig ... Det er den tiden i døgnet flått. Clock ticks starter på et vilkårlig tidspunkt i fortiden (ofte oppstart), og de forhånd når kjernen klokken rutinen kjøres. Hvor mange clock ticks per sekund kan variere. Du kan ringe sysconf (_SC_CLK_TCK) for å finne ut din verdi. 100 er vanlig verdi i disse dager. Eldre systemer brukes 60. 100 og 60 er de eneste to verdiene jeg har sett. Klokke flått er også tilbake som en signert heltall. Så etter omtrent et år, vil antallet rulle tilbake til null. Annet enn rollover, flått klokke også forhånd én etter én. (Clock flått kalles ofte «jiffies" av Linux-folk.) Det er også et annet system samtale gettimeofday () som returnerer gang siden Unix Epoch i sekunder og mikrosekunder. gettimeofday () kreves for å eksistere og å bruke mikrosekund presisjon. Men nøyaktigheten er eksplisitt uspesifisert. Det mikrosekunder ikke forhånd ett etter ett i ethvert system som jeg har sett. Jeg antar at Unix-systemer er ganske god med hundredeler av et sekund og kanskje millisekunder er noen tilfeller. Men jeg ville ikke påta seg noe nøyaktighet enn det.

Lesbar tidsstempler
Nå som vi vet hvordan Unix holder tid, la oss gå videre til et annet emne: Hvordan vise tid til en bruker. Få brukere vil være fornøyd med et tidsstempel som vises som 1171733878. Siden jeg i det østlige Timezone av USA, ønsker jeg å se noe lignende 12:37:58 den 17. Feb, 2007. Men en person i Los Angeles California ønsker noe sånt 9:37:58 den 17. Feb, 2007. Jeg skrev en liten perl script for å vise formaterte tid da gitt et nummer som 1171733878. Her er resultatet slik det skal vises i både det østlige og Stillehavet tidssoner for et par nøye utvalgte tidsstempler:
Øst:
1173596399 Søn 2007-03-11 01:59:59 Standard Time
1173596400 Søn 2007-03-11 03:00:00 Sommertid
1173607199 Søn 2007-03-11 05:59:59 Sommertid
1173607200 Søn 2007-03-11 06:00:00 Sommertid
Stillehavet:
1173596399 Lør 2007-03-10 22:59:59 Standard Time
1173596400 Lør 2007-03-10 23:00:00 Standard Time
1173607199 Søn 2007-03-11 01:59:59 Standard Time
1173607200 Søn 2007-03-11 03:00:00 Sommertid
Legg merke til at den interne Unix tiden ikke endres med utbruddet av sommertid. Hva som skjer er at en ny regel for hvordan du kan vise tiden trer i kraft. For å konvertere intern tid til et tidsstempel, må Unix å vite hvilken tidssone du vil bruke. Og det trenger å vite om Sommertid er i bruk. Det finnes forskjellige delrutinene som kan kalles å formatere et tidsstempel. Alle disse eventuelt påberope tzset () for å bestemme tidssonen og staten Sommertid. Og tzset alltid ser etter miljøvariabelen TZ å finne ut hva brukeren ønsker. Hvis du ikke en TZ environment variable, tzset () vil gå med en slags standard som kan variere fra system til system. The TZ environment variable er ofte satt til noe som EST5EDT4 som er det jeg bruker. Denne sier at jeg er i en tidssone som kalles EST som er forskjøvet fra Universal Time etter 5 timer og under Sommertid dager tidssone kalles EDT som er forskjøvet fra Universal Time etter 4 timer. Å vite når Sommertid er i bruk, vil tzset se på noen datafilen. Hvilken fil (og hvilket format filen er) varierer fra system til system. Oppdateringene som er tilgjengelig for årets endring i sommertid skulle egentlig være litt mer enn enkelte revisjoner til disse filene.

Universal Time
I tillegg til å vite om din tidssone, et Unix-system må kunne bruke Universal Time (som er nesten det samme som den gamle Greenwich Mean Time). Dette er hva "date-u" gjør. Definisjonen for Universal Time er godt kjent og ikke involverer sommertid endringer. Universal Time definisjonen kan bygge inn datoen rutiner istedenfor å bruke datafilen for tzset (). Dette kan være sant selv om en oppføring er tilstede for UTC. Postprogrammer bruker ofte UTC tidsstempler.
 

Hugseliste

Tags
klokke, mtime, timekeeping

Thread Tools Søk i denne tråden
Søk i denne tråden:

Avansert søk
Visningsmoduser Ranger denne tråden
Ranger denne tråden:

Innleggsaktivitet Regler
Du kanskje ikke poste nye tråder
Du kanskje ikke poste svar
Du kanskje ikke post vedlegg
Du kanskje ikke redigere innleggene dine

BB-kode er
Smilefjes er
[IMG] koden
HTML-koden Av
Pingbacks er
Refbacks er




Alle klokkeslett er GMT -4. Nå er klokken 01:41.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Language Translations Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX og Linux Forums Content Copyright © 1993-2009. All Rights Reserved.Ad Management by RedTyger

Content Relevant nettadresser av vBSEO 3.2.0