Hantera kalenderdatum och tidpunkterFlash Player 9 och senare, Adobe AIR 1.0 och senare Alla funktioner för hantering av kalenderdatum och tidpunkter i ActionScript 3.0 är samlade i den översta klassen Date. Klassen Date innehåller metoder och egenskaper med vilka du hanterar datum och tidpunkter i antingen universaltid (Coordinated Universal Time) eller lokaltid i en specifik tidszon. Universaltid (UTC) är en standardtidsdefinition som i princip är densamma som GMT (Greenwich Mean Time). Skapa Date-objektKlassen Date innehåller en av de mest mångsidiga konstruktormetoderna av alla huvudklasser. Du kan anropa den på fyra olika sätt. För det första, om inga parametrar anges, returnerar konstruktorn Date() ett Date-objekt med aktuellt datum och aktuell tid (lokal tid, baserat på tidszonen). Här är ett exempel: var now:Date = new Date(); För det andra, om en enda numerisk parameter anges, behandlar konstruktorn Date() det som antalet millisekunder sedan 1 januari 1970 och returnerar ett motsvarande Date-objekt. Observera att det millisekundvärde du anger behandlas som antal millisekunder sedan 1 januari 1970 i universaltid (UTC). Däremot visar Date-objektet värden i din lokala tidszon, såvida du inte använder UTC-specifika metoder för att hämta och visa dem. Om du skapar ett nytt Date-objekt med hjälp av en enda millisekundsparameter måste du ta hänsyn till tidzonsskillnaden mellan lokal tid och UTC-tid. I följande kod skapas ett Date-objekt angivet som midnatt den 1 januari 1970, i UTC: var millisecondsPerDay:int = 1000 * 60 * 60 * 24; // gets a Date one day after the start date of 1/1/1970 var startTime:Date = new Date(millisecondsPerDay); För det tredje kan du skicka flera numeriska parametrar till konstruktorn Date(). Den behandlar parametrarna som år, månad, dag, timma, minut, sekund och millisekund samt returnerar motsvarande Date-objekt. Dessa indataparametrar antas vara i lokal tid, inte i UTC. Med följande kod hämtas ett Date-objekt angivet som midnatt den 1 januari 2000, i lokal tid: var millenium:Date = new Date(2000, 0, 1, 0, 0, 0, 0); För det fjärde kan du skicka en enstaka strängparameter till konstruktorn Date(). Den försöker tolka strängen som datum- eller tidskomponenter och returnerar sedan ett motsvarande Date-objekt. När du använder det här sättet kan det vara bra att infoga konstruktorn Date() i ett try..catch-block för att fånga upp tolkningsfel. Konstruktorn Date() har stöd för ett antal olika strängformat (som finns listade i Referenshandbok för ActionScript 3.0 i Adobe Flash-plattformen). Med följande kodsats initieras ett nytt Date-objekt med ett strängvärde: var nextDay:Date = new Date("Mon May 1 2006 11:30:00 AM"); Om konstruktorn Date() inte kan tolka strängparametern genereras inget undantag. Däremot kommer resulterande Date-objekt att innehålla ett ogiltigt datumvärde. Hämta värden för tidsenheterDu kan extrahera värden för olika tidsenheter inom ett Date-objekt med hjälp av egenskaper eller metoder i klassen Date. Alla följande egenskaper ger ett värde för en tidsenhet i Date-objektet:
Genomföra beräkningar med datum och tidpunkterDu kan utföra addition och subtraktion för datum och tidpunkter med klassen Date. Datumvärden används internt i millisekunder, vilket innebär att du behöver konvertera andra värden till millisekunder innan du kan addera dem till eller subtrahera dem från Date-objekt. Om programmet ska utföra många beräkningar med datum och tidpunkter kan det vara praktiskt att skapa konstanter för vanliga tidsenheter i antal millisekunder enligt följande: public static const millisecondsPerMinute:int = 1000 * 60; public static const millisecondsPerHour:int = 1000 * 60 * 60; public static const millisecondsPerDay:int = 1000 * 60 * 60 * 24; På så vis är det enkelt att utföra datumberäkning med standardtidsenheter. I följande kod anges ett datumvärde till en timma från aktuell tidpunkt med hjälp av metoderna getTime() och setTime(): var oneHourFromNow:Date = new Date(); oneHourFromNow.setTime(oneHourFromNow.getTime() + millisecondsPerHour); Ett annat sätt att ange ett datumvärde är att skapa ett nytt Date-objekt med en enda millisekundsparameter. Med följande kod läggs 30 dagar till ett datum för att beräkna ett annat: // sets the invoice date to today's date var invoiceDate:Date = new Date(); // adds 30 days to get the due date var dueDate:Date = new Date(invoiceDate.getTime() + (30 * millisecondsPerDay)); Därefter multipliceras konstanten millisecondsPerDay med 30 som motsvarar 30 dagars tid och resultatet läggs till värdet invoiceDate och används för att ange värdet dueDate. Konvertering mellan tidszonerBeräkningar med datum och tidpunkter är praktiskt om du vill konvertera datum från en tidszon till en annan. Detta görs i metoden getTimezoneOffset() som sedan returnerar värdet i antal minuter som Date-objektets tidszon skiljer sig från UTC. Ett värde returneras i minuter eftersom inte alla tidszoner har ökningar i jämna timantal; vissa har en halvtimmes skillnad från närliggande tidszon. I följande exempel används tidszonsskillnaden för att konvertera ett datum från lokal tid till UTC. Konverteringen utförs först genom att beräkna tidszonsvärdet i millisekunder och sedan justera Date-värdet med antalet: // creates a Date in local time var nextDay:Date = new Date("Mon May 1 2006 11:30:00 AM"); // converts the Date to UTC by adding or subtracting the time zone offset var offsetMilliseconds:Number = nextDay.getTimezoneOffset() * 60 * 1000; nextDay.setTime(nextDay.getTime() + offsetMilliseconds); |
|