Leer Java voor Android-ontwikkeling basisprincipes voor datum en tijd

In deze tutorial leert u werken met datums en tijden in Java en in Android-applicaties. Datum- en tijdgegevens kunnen op verschillende manieren worden bepaald, gewijzigd en opgeslagen.

Android-applicaties zijn geschreven in de Java, een programmeertaal. Java heeft een aantal primitieve gegevenstypen voor verschillende soorten getallen (gehele getallen, drijvers, etc.), Booleaanse waarden en enkele tekens. Java bevat ook tal van klassen voor het opslaan, formatteren en wijzigen van datum- en tijdgegevens voor gebruik in uw Android-apps. In deze zelfstudie leert u hoe u de huidige datum en tijd kunt bepalen, datum- en tijdgegevens kunt opslaan en deze op verschillende manieren kunt weergeven.

Wat je nodig hebt

Technisch gezien heb je geen tools nodig om deze tutorial te voltooien, maar je zult ze zeker nodig hebben om Android-applicaties te ontwikkelen.

Om Android-applicaties (of welke Java-applicaties dan ook) te ontwikkelen, hebt u een ontwikkelomgeving nodig om applicaties te schrijven en te bouwen. Eclipse is een zeer populaire ontwikkelomgeving (IDE) voor Java en de geprefereerde IDE voor Android-ontwikkeling. Het is gratis beschikbaar voor Windows-, Mac- en Linux-besturingssystemen.

Zie de Android-ontwikkelaarswebsite voor volledige instructies over het installeren van Eclipse (inclusief welke versies worden ondersteund) en de Android SDK.

Wat is een datum of tijd, echt waar?

De eerste dingen eerst: de datum en de tijd zijn in feite twee delen van hetzelfde stuk gegevens (een tijdstip). Als het gaat om het opslaan van datums en tijden op een computer, kan het handig zijn om terug te denken naar uw eerste computerklasse en te herinneren aan het feit dat alle gegevens op een computer bestaan ​​uit "enen en nullen". Computers (en Android-apparaten zijn geen uitzondering) hebben niet echt een gevoel voor tijd zoals mensen dat doen, maar houden in plaats daarvan een numerieke weergave van de huidige datum of tijd (tikt altijd vooruit, één milliseconde tegelijk) en formatteert deze informatie vervolgens in verschillende manieren om specifieke doelen te bereiken. Immers, een enkel moment in de tijd wordt anders geïnterpreteerd, afhankelijk van uw tijdzone of locatie, ongeacht of u (of uw gebied) zomertijd en verschillende andere factoren erkent.

Voeg hieraan toe dat datums en tijden anders worden weergegeven in verschillende culturen en regio's. In de Verenigde Staten bijvoorbeeld, formatteren we onze datums vaak als volgt: 6 april 1981 of 04/06/1981, terwijl in Europa de dag normaal gesproken voorafgaat aan de maand, zoals deze: 6 april, 1981 of 06/04 / 1981. Evenzo hebben sommige landen het concept van AM en PM met een 12-uur, terwijl anderen gewoon een 24-uurs klok gebruiken.

Computers, waaronder Android-apparaten, berekenen tijden en datums als een enkel getal (een lang), dat groeit naarmate de tijd verstrijkt. Het getal zelf is gelijk aan het aantal milliseconden dat is verstreken sinds een specifieke datum in het verleden. In dit geval is het tijdstip waarop de "tijd" begon te tikken: middernacht, 1 januari 1970. Dit mechanisme wordt aangeduid als Unix-tijd of POSIX-tijd.

Wat is een ontwikkelaar om te doen?

Pop quiz! Welke van de volgende reeksen vertegenwoordigt correct de vierde maand van het (Gregoriaanse) kalenderjaar: A, april, april, april, april of april? Het antwoord? Allemaal. Het werken met datums en tijden lijkt al een beetje ingewikkeld, toch? In feite hebben we alle Java-naslagwerken in ons kantoor snel bekeken (niet onaanzienlijk) en op een substantiële manier maar een beperkt aantal omslagen. Maar geen paniek. Accepteer gewoon het feit dat je als ontwikkelaar een beetje moeite moet doen om twee doelen te bereiken:

1. Uw externe doel: om de gebruiker toe te staan ​​te werken met de datum- en tijdnotaties waarmee zij het meest vertrouwd zijn, of op zijn minst vertrouwd zijn met.
2. Uw interne doel: om uw applicatiecode formaatonafhankelijk te houden, dus het werkt overal met weinig moeite.

Laten we nu een beetje over elk van deze doelen praten.

Het externe doel: wees flexibel en gebruik standaardbesturingselementen

Is het je ooit opgevallen dat op enkele reissites de gebruiker handmatig datum- of tijdinformatie kan invoeren? In plaats daarvan vertrouwen ze op kalenderkiezers en vaste vervolgkeuzemenu's voor de dag, de maand en het jaar, of ten minste een specifiek datumformaat afdwingen (meestal gebonden aan uw taal / land, waar ze van tevoren om vragen). Vanuit het perspectief van een gebruikersinterface moeten je apps datum- en tijdnuances respecteren, althans tot op zekere hoogte. U moet echter ook goed nadenken over de methoden waarop de gebruiker datum- en tijdinformatie kan invoeren. Door standaard datum- en tijdkiezers te gebruiken in uw Android-apps, zoals DatePicker en TimePicker, beperkt u effectief de gegevens die gebruikers kunnen invoeren die eenvoudig kunnen worden geconverteerd naar de juiste datum- en tijdstructuren, zonder elke bekende indeling te moeten parseren (niet naar vermeld de typefouten).

Het interne doel: houd uw datums en tijden generiek

Vanuit een intern codeperspectief moeten uw apps een generieke datum- / tijdweergave gebruiken die niet afhankelijk is van deze nuances.

In Java worden datums en tijden op verschillende manieren opgeslagen, afhankelijk van uw vereisten.

  • Het lange type is een primitief gegevenstype dat in staat is om het aantal milliseconden op te slaan dat is verstreken sinds een specifiek tijdstip (Unix-tijd).
  • De Date-klasse (java.util.Date) is een utiliteitsklasse voor het opslaan van datum en tijd op een manier die redelijkerwijs kan worden gemanipuleerd zonder constant over tijd na te denken in termen van milliseconden.
  • De klasse Calendar (java.util.Calendar) is een hulpprogramma voor het werken met verschillende agenda's en voor het op verschillende manieren bewerken van datum- en tijdinformatie..
  • De GregorianCalendar-klasse (een subklasse van java.util.Calendar) wordt voornamelijk gebruikt voor de datummanipulatie op het westelijk halfrond, waar we een kalender van 12 maanden gebruiken, met 7 dagen tot een week en twee tijdperken (BC en AD).

Bepaling van de huidige datum en tijd

Er zijn een aantal manieren om de huidige tijd op een Android-apparaat te bepalen.

U kunt de onbewerkte datum- en tijdgegevens bepalen met behulp van de statische methode in de klasse System (java.lang.System):

 long msTime = System.currentTimeMillis (); Datum curDateTime = nieuwe datum (msTime); 

Deze methode is afhankelijk van de tijd dat het apparaat wordt gebruikt denkt het is, dat kan al dan niet betrouwbaar zijn. Een andere manier om de huidige datum en tijd te bepalen, gebruikt de standaardconstructor voor de klasse Date, waarmee een object Date met de huidige datum en tijd wordt gemaakt:

 Datum anotherCurDate = nieuwe datum (); 

Er zijn nog andere manieren om de juiste exacte tijd te bepalen - computers controleren regelmatig bekende servers voor tijdbewaking om te zorgen dat iedereen "gesynchroniseerd" is. Dit proces is iets buiten het bereik van deze zelfstudie, maar het volstaat om te zeggen dat het aanvragen en ontvangen van de juiste tijd enige tijd kost, waarna er rekening mee moet worden gehouden voordat synchronisatie echt kan worden bereikt.

(Opmerking: Android-apparaten die verbinding maken met mobiele diensten hebben over het algemeen locale accurate datum- en tijdinformatie omdat deze kan worden gebruikt in communicatie met de radiotorens.)

Datum- en tijdvariabelen maken van Scratch

Nu, wat als u een datum- of tijdvariabele wilt maken vanaf een specifieke datum, zoals een verjaardag. Misschien weet je wel dat je, net boven je hoofd, het aantal milliseconden sinds 1/1/1970 middernacht hebt dat je verjaardag vertegenwoordigt. In mijn geval zou dat iets zijn als 229703700 milliseconden, of de ochtend van 12 april 1977 (aangepast voor de tijd in Californië). Zoals u kunt zien, is dit echter erg omslachtig. Wat je echt wilt doen is zeggen: computer, maak me een datum / tijd-variabele die 12 april 1977 representeert. Dat is waar de klasse van de kalender in het spel komt:

 GregorianCalendar bday = new GregorianCalendar (1977, Calendar.APRIL, 12); 

U kunt kalenderobjecten gebruiken om datums te manipuleren en interessante informatie over hen te extraheren. U kunt bijvoorbeeld de methode get () gebruiken om de dag van de week waarop ik ben geboren te bepalen:

 int dayOfWeek = bday.get (Calendar.DAY_OF_WEEK); // Geeft als resultaat 3, voor dinsdag! 

Houd er rekening mee dat de maanden van de kalender gebaseerd zijn op 0, dus januari is maand 0, niet maand 1 en daarom is april maand 3 en niet 4. Eindelijk kunt u een datum-object extraheren uit een kalenderdatumconfiguratie met getTime () methode.

Datum- en tijdgegevens opmaken

U kunt de helperklasse DateFormat (java.text.DateFormat) gebruiken om onbewerkte datum- en tijdinformatie om te zetten in verschillende reeksindelingen (voor verschillende landinstellingen, enz.) Of om reeksinformatie te parseren in de juiste datum- en tijdbits voor gebruik in code.

U kunt bijvoorbeeld de klasse SimpleDateFormat (een subklasse van de klasse DateFormat) gebruiken om een ​​aangepaste tekenreeks te maken met informatie over datum en tijd. Eerst moet u uw indelingsstring specificeren, met behulp van de juiste codes voor de verschillende stukjes informatie (zie de SimpleDateFormat-documentatie voor details over individuele codes). Vervolgens past u die informatie toe op een specifieke datum of tijd. Bijvoorbeeld:

 Datum anotherCurDate = nieuwe datum (); SimpleDateFormat formatter = new SimpleDateFormat ("EEEE, MMMM d 'om' hh: mm a 'in het jaar' yyyy G '); String formatattedDateString = formatter.format (anotherCurDate); 

Als u de tekenreeks genaamd formatattedDateString wilt afdrukken, ziet u mogelijk iets als: "Maandag 6 december om 8:34 AM in het jaar 2010 AD".

Overigens kunt u ook de klassen DateFormat en SimpleDateFormat gebruiken om de tekenreeksen voor datum en tijd in de juiste dataklasse te ontleden. Hopelijk besteed je niet veel tijd aan het parseren van door de gebruiker ingevoerde datums (wat over het algemeen behoorlijk vervelend is), maar het hebben van een ontleedmechanisme is handig. U wilt bijvoorbeeld tijdstempels uit een XML-bestand parseren, waarbij u vooraf het formaat van de tijdstempel beheert of kent en daarom de juiste indelingstekenreeks kunt genereren om te parseren met.

Datum- en tijdinformatie weergeven aan de gebruiker

Er zijn verschillende manieren om datum- en tijdinformatie aan de gebruiker weer te geven. De manier waarop u kiest, hangt af van uw vereisten.

Misschien is de eenvoudigste manier om gewoon een specifieke datum of tijd weer te geven als een juist geformatteerde reeks. Deze methode is het meest logisch voor vaste datums of tijden, zoals verjaardagen of evenementen. Gebruik gewoon de utiliteitsklasse DateFormat om de juiste tekenreeks te maken en deze op het scherm weer te geven, net als elke andere tekst (zoals binnen een TextView-besturingselement).

Om de tijd "in real time" voorbij te laten gaan, kunt u de bedieningselementen AnalogClock (zie afbeelding) of DigitalClock gebruiken.

Tip: op zoek naar een timer? Bekijk de chronometercontrole.

Afsluiten

Datums en tijden zijn belangrijke gegevenstypen waarmee Java-ontwikkelaars onvermijdelijk moeten werken. Intern bewaren apparaten de datum- en tijdgegevens numeriek, maar gebruikers interpreteren deze informatie op verschillende manieren en met verschillende indelingen. Houd deze nuances onder controle door de manieren te beperken waarop gebruikers datums en tijden kunnen invoeren met behulp van ingebouwde pickerbesturingselementen en ervoor te zorgen dat uw code generieke weergave van deze informatie gebruikt, bijvoorbeeld door een van de vele beschikbare klassen te gebruiken voor het opslaan van datum- en tijdinformatie.

Over de Auteurs

Mobiele ontwikkelaars Lauren Darcey en Shane Conder hebben samen meerdere boeken geschreven over Android-ontwikkeling: een diepgaand programmeerboek getiteld Android Wireless Application Development en Sams TeachYourself Android Application Development binnen 24 uur. Wanneer ze niet schrijven, besteden ze hun tijd aan het ontwikkelen van mobiele software bij hun bedrijf en het leveren van consultingservices. Ze zijn te bereiken via e-mail naar [email protected], via hun blog op androidbook.blogspot.com, en op Twitter @androidwireless.

Meer hulp nodig bij het schrijven van Android-apps? Bekijk onze nieuwste boeken en bronnen!