<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Java Simples &#187; mascara</title>
	<atom:link href="http://www.javasimples.com.br/tag/mascara/feed" rel="self" type="application/rss+xml" />
	<link>http://www.javasimples.com.br</link>
	<description>Porque Java não precisa ser difícil...</description>
	<lastBuildDate>Tue, 03 Jan 2012 23:27:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Trabalhando com Datas… chega de trauma!</title>
		<link>http://www.javasimples.com.br/core-java/trabalhando-com-datas-chega-de-trauma</link>
		<comments>http://www.javasimples.com.br/core-java/trabalhando-com-datas-chega-de-trauma#comments</comments>
		<pubDate>Fri, 19 Feb 2010 01:44:50 +0000</pubDate>
		<dc:creator>Felipe Saab</dc:creator>
				<category><![CDATA[Core Java]]></category>
		<category><![CDATA[converter]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[date]]></category>
		<category><![CDATA[formatacao]]></category>
		<category><![CDATA[mascara]]></category>
		<category><![CDATA[representacao]]></category>
		<category><![CDATA[string]]></category>

		<guid isPermaLink="false">http://javasimples.wordpress.com/2010/02/18/trabalhando-com-datas-chega-de-trauma/</guid>
		<description><![CDATA[Quem nunca teve que manipular datas em algum programa não é um programador poxa… O pior caso na minha opinião são aqueles bancos de dados desgraçados que não aceitam a data no formato padrão. Cá entre nós, é uma encheção de saco ficar invertendo a data. Vamos então a algumas dicas para não haver mais [...]]]></description>
			<content:encoded><![CDATA[<p><!--:pt-->Quem nunca teve que manipular datas em algum programa não é um programador poxa… O pior caso na minha opinião são aqueles bancos de dados <span style="text-decoration: line-through;">desgraçados</span> que não aceitam a data no formato padrão. Cá entre nós, é uma encheção de saco ficar invertendo a data. Vamos então a algumas dicas para não haver mais traumas quando o assunto em questão são as datas:</p>
<p><!--:--><span id="more-37"></span><!--:pt--></p>
<h4>Componentes Swing para trabalhar com datas</h4>
<h5>
<hr /></h5>
<p><a href="http://javasimples.wordpress.com/2010/01/19/adicionando-jcalendar-e-jdatechooser-paleta-do-netbeans/" target="_blank">Nesse</a> outro post eu mostrei como adicionar ao Netbeans alguns ótimos componentes para quem precisa tratar datas de uma maneira elegante em uma interface bem bonita.<br />
Vale a pena dar uma conferida!</p>
<h4>Strings de formatação de datas</h4>
<h5>
<hr /></h5>
<p>Algo que todo mundo deve saber é que em alguns componentes (como os demonstrados no post citado acima) e alguns objetos (que veremos mais adiante) conseguem formatar a data de acordo com uma string, ou seja, mostrar a data em diversos formatos, tais quais definidos por uma string.</p>
<p>Antes de mostrar alguns exemplos vou deixar especificado quais os caracteres que podem compor a string de formatação e o que eles representam.<br />
Segundo a <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/text/SimpleDateFormat.html" target="_blank">documentação oficial</a>:</p>
<table border="0" cellspacing="3" cellpadding="0" width="433" summary="Chart shows pattern letters, date/time component, presentation, and examples.">
<tbody>
<tr bgcolor="#ccccff">
<th align="left">Letter</th>
<th width="158" align="left">Date or Time Component</th>
<th width="121" align="left">Presentation</th>
<th width="94" align="left">Examples</th>
</tr>
<tr>
<td>G</td>
<td width="158">Era designator</td>
<td width="121">Text</td>
<td width="94">AD</td>
</tr>
<tr bgcolor="#eeeeff">
<td>y</td>
<td width="158">Year</td>
<td width="121">Year</td>
<td width="94">1996; 96</td>
</tr>
<tr>
<td>M</td>
<td width="158">Month in year</td>
<td width="121">Month</td>
<td width="94">July; Jul; 07</td>
</tr>
<tr bgcolor="#eeeeff">
<td>w</td>
<td width="158">Week in year</td>
<td width="121">Number</td>
<td width="94">27</td>
</tr>
<tr>
<td>W</td>
<td width="158">Week in month</td>
<td width="121">Number</td>
<td width="94">2</td>
</tr>
<tr bgcolor="#eeeeff">
<td>D</td>
<td width="158">Day in year</td>
<td width="121">Number</td>
<td width="94">189</td>
</tr>
<tr>
<td>d</td>
<td width="158">Day in month</td>
<td width="121">Number</td>
<td width="94">10</td>
</tr>
<tr bgcolor="#eeeeff">
<td>F</td>
<td width="158">Day of week in month</td>
<td width="121">Number</td>
<td width="94">2</td>
</tr>
<tr>
<td>E</td>
<td width="158">Day in week</td>
<td width="121">Text</td>
<td width="94">Tuesday; Tue</td>
</tr>
<tr bgcolor="#eeeeff">
<td>a</td>
<td width="158">Am/pm marker</td>
<td width="121">Text</td>
<td width="94">PM</td>
</tr>
<tr>
<td>H</td>
<td width="158">Hour in day (0-23)</td>
<td width="121">Number</td>
<td width="94">0</td>
</tr>
<tr bgcolor="#eeeeff">
<td>k</td>
<td width="158">Hour in day (1-24)</td>
<td width="121">Number</td>
<td width="94">24</td>
</tr>
<tr>
<td>K</td>
<td width="158">Hour in am/pm (0-11)</td>
<td width="121">Number</td>
<td width="94">0</td>
</tr>
<tr bgcolor="#eeeeff">
<td>h</td>
<td width="158">Hour in am/pm (1-12)</td>
<td width="121">Number</td>
<td width="94">12</td>
</tr>
<tr>
<td>m</td>
<td width="158">Minute in hour</td>
<td width="121">Number</td>
<td width="94">30</td>
</tr>
<tr bgcolor="#eeeeff">
<td>s</td>
<td width="158">Second in minute</td>
<td width="121">Number</td>
<td width="94">55</td>
</tr>
<tr>
<td>S</td>
<td width="158">Millisecond</td>
<td width="121">Number</td>
<td width="94">978</td>
</tr>
<tr bgcolor="#eeeeff">
<td>z</td>
<td width="158">Time zone</td>
<td width="121">General time zone</td>
<td width="94">Pacific Standard Time; PST; GMT-08:00</td>
</tr>
<tr>
<td>Z</td>
<td width="158">Time zone</td>
<td width="121">RFC 822 time zone</td>
<td width="94">-0800</td>
</tr>
</tbody>
</table>
<p>Fique a vontade para brincar de combinar esses caracteres para formar a data.<br />
Exemplo:</p>
<table border="0" cellspacing="3" cellpadding="0" width="428">
<tbody>
<tr bgcolor="#ccccff">
<th width="136" align="left">String</th>
<th width="132" align="left">Data formatada</th>
<th width="146" align="left">Comentário</th>
</tr>
<tr>
<td width="136">dd/MM/yyyy</td>
<td width="132">25/12/2010</td>
<td width="146">Padrão brasileiro</td>
</tr>
<tr bgcolor="#eeeeff">
<td width="136">MM/dd/yyyy</td>
<td width="132">12/25/2010</td>
<td width="146">Padrão americano</td>
</tr>
<tr>
<td width="136">yyyy-MM-dd</td>
<td width="132">2010-12-25</td>
<td width="146">Padrão de alguns bancos de dados</td>
</tr>
<tr bgcolor="#eeeeff">
<td width="136">dd MMMMMMMM yyyy</td>
<td width="132">25 Dezembro 2010</td>
<td width="146">Quando tem mais de 2 caracteres ‘M’, o resultado é o nome do mês por extenso</td>
</tr>
<tr>
<td width="136">HH:mm:ss:SSSS</td>
<td width="132">15:22:54:1264</td>
<td width="146">Hora…</td>
</tr>
</tbody>
</table>
<h4>O objeto SimpleDateFormat: convertendo datas facilmente</h4>
<h5>
<hr /></h5>
<p>A classe SimpleDateFormat do pacote java.lang.text é uma mão na roda tão grande!! Com um objeto dessa classe a gente pode facilmente converter um objeto java.util.Date para uma String no formato que a gente quiser (através da string de formatação).<br />
Exemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #003399;">SimpleDateFormat</span> sd <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">SimpleDateFormat</span><span style="color: #009900;">&#40;</span>“yyyy<span style="color: #339933;">-</span>MM<span style="color: #339933;">-</span>dd”<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003399;">Date</span> data <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Date</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//data atual</span>
&nbsp;
<span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>sd.<span style="color: #006633;">format</span><span style="color: #009900;">&#40;</span>data<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Do mesmo jeito que dá pra converter um objeto Date pra uma String, o inverso também é válido: o SimpleDateFormat também converte uma String para um Date:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #003399;">SimpleDateFormat</span> sd <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">SimpleDateFormat</span><span style="color: #009900;">&#40;</span>“dd<span style="color: #339933;">/</span>MM<span style="color: #339933;">/</span>yyyy”<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003399;">String</span> meuNiver <span style="color: #339933;">=</span> “<span style="color: #cc66cc;">13</span><span style="color: #339933;">/</span>04<span style="color: #339933;">/</span><span style="color: #cc66cc;">1989</span>”<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #003399;">Date</span> data <span style="color: #339933;">=</span> sd.<span style="color: #006633;">parse</span><span style="color: #009900;">&#40;</span>meuNiver<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Muito muito muito simples, útil e prático!</p>
<h4>Comparando datas</h4>
<h5>
<hr /></h5>
<p>Não sei se todo mundo sabe… mas uma data representada pelo objeto Date nada mais é do que um long, um número bem grande que guarda o número de milisegundos que já se passaram desde 1º de Janeiro de 1970, 00:00:00 GMT até o mome<br />
nto atual.</p>
<p>O objeto Date possui alguns métodos para comparar datas, são eles:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #003399;">Date</span> natal <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Date</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">110</span>,<span style="color: #cc66cc;">11</span>,<span style="color: #cc66cc;">25</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>        <span style="color: #666666; font-style: italic;">//25/12/2010</span>
<span style="color: #003399;">Date</span> meuNiver <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Date</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">110</span>,<span style="color: #cc66cc;">3</span>,<span style="color: #cc66cc;">13</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  <span style="color: #666666; font-style: italic;">//13/04/1989</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>natal.<span style="color: #006633;">after</span><span style="color: #009900;">&#40;</span>meuNiver<span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> meuNiver.<span style="color: #006633;">before</span><span style="color: #009900;">&#40;</span>natal<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Vou ficar mais velho antes do natal...&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>natal.<span style="color: #006633;">equals</span><span style="color: #009900;">&#40;</span>meuNiver<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Vou ganhar 2 presentes no mesmo dia! :D&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>O código é totalmente auto-explicativo, exceto pelo construtor meio estranho do objeto Date. Seus parâmetros são: o ano – 1900 , o mês – 1, e o dia.</p>
<p>Os métodos “after(Date)”, “before(Date)” e “equals(Object)” nada mais fazem do que comparar aqueles números que eu comentei ali em cima. Quem não acreditar em mim é só ir no código fonte do método (no Netbeans: Ctrl + clique no método) e verificar que é exatamente isso que acontece:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">boolean</span> after<span style="color: #009900;">&#40;</span><span style="color: #003399;">Date</span> when<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">return</span> getMillisOf<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span> getMillisOf<span style="color: #009900;">&#40;</span>when<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Um probleminha que me ocorreu esses dias (e deu um trabalhinho) foi: como comparar datas sem envolver as horas, minutos, segundos e milisegundos?</p>
<p>Algumas vezes o horário pode atrapalhar a comparação das datas, uma vez que ela se baseia no número por trás da data. Só para ilustrar o problema segue um exemplinho:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #003399;">Date</span> inicioNatal <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Date</span><span style="color: #009900;">&#40;</span>1293242400000L<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//25/12/2010 00:00:00</span>
<span style="color: #003399;">Date</span> fimNatal <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Date</span><span style="color: #009900;">&#40;</span>1293328799999L<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   <span style="color: #666666; font-style: italic;">//25/12/2010 23:59:59</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>inicioNatal.<span style="color: #006633;">equals</span><span style="color: #009900;">&#40;</span>fimNatal<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;É natal!!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>No construtor dos Date foram passados os números que representam o primeiro e último segundo do natal. O “L” no final é apenas para indicar que aquele número é do tipo long.</p>
<p>Voltando ao problema, no código acima nunca será exibida a mensagem “É Natal!!” pois os números que representam as datas não são iguais.</p>
<p>A alternativa para solucionar esse problema que eu achei (confesso que parece uma gambiarra) foi a seguinte:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #003399;">SimpleDateFormat</span> sd <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">SimpleDateFormat</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;dd/MM/yyyy&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003399;">Date</span> inicioNatal <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Date</span><span style="color: #009900;">&#40;</span>1293242400000L<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//25/12/2010 00:00:00</span>
<span style="color: #003399;">Date</span> fimNatal <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Date</span><span style="color: #009900;">&#40;</span>1293328799999L<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   <span style="color: #666666; font-style: italic;">//25/12/2010 23:59:59</span>
&nbsp;
inicioNatal <span style="color: #339933;">=</span> sd.<span style="color: #006633;">parse</span><span style="color: #009900;">&#40;</span>sd.<span style="color: #006633;">format</span><span style="color: #009900;">&#40;</span>inicioNatal<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
fimNatal <span style="color: #339933;">=</span> sd.<span style="color: #006633;">parse</span><span style="color: #009900;">&#40;</span>sd.<span style="color: #006633;">format</span><span style="color: #009900;">&#40;</span>fimNatal<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>inicioNatal.<span style="color: #006633;">equals</span><span style="color: #009900;">&#40;</span>fimNatal<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;É natal!!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>As linhas em negrito são responsáveis por “zerar” as horas, minutos, segundos e milisegundos da data.<br />
Como? Muito simples: como o objeto SimpleDateFormat foi criado com uma string de formatação que não contém horas, minutos ou outros, ele simplesmente ignora essas partes da data na hora de converter uma string para Date. Nós primeiro passamos de Date para string (somente dia/mes/ano) e passamos a string para Date em seguida (sem horas, minutos e etc).</p>
<p>Existem muito mais coisas quando se trata de manipulação de datas, mas como esse post não tem a finalidade de deixar ensinar TUDO de avançado sobre datas, ficamos por aqui.</p>
<p>[] e até a próxima,<br />
Saab.<!--:--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.javasimples.com.br/core-java/trabalhando-com-datas-chega-de-trauma/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

