You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: book/03-localization/sections/04-formats.asc
+21-16Lines changed: 21 additions & 16 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,3 +1,4 @@
1
+
1
2
:java-package: src/org/j6toj8/localization
2
3
:section-java-package: ../../../{java-package}
3
4
@@ -10,13 +11,13 @@ Format dates, numbers, and currency values for localization with the NumberForma
10
11
Formatar datas, números e valores monetários para localização utilizando as classes NumberFormat e DateFormat, incluindo padrões de formato de número e data.
Ainda dentro das ideias de Localização e Internacionalização, é comum a necessidade de apresentar datas, números e valores monetários em diferentes formatos.
14
+
Ainda dentro do assunto de Localização e Internacionalização, é comum a necessidade de apresentar datas, números e valores monetários em diferentes formatos.
14
15
15
16
O exame de certificação compreende cinco classes principais de formatação:
16
17
17
18
* `NumberFormat` -> Formatação geral de números, valores monetários, percentuais e números inteiros com arredondamento, possivelmente baseados em `Locale`.
18
19
* `DecimalFormat` -> Formatação de números quando há necessidade de definições mais específicas ou personalizadas do formato.
19
-
* `DateFormat` -> Formatação de data e hora antes do Java 8 utilizando formato predefinidos.
20
+
* `DateFormat` -> Formatação de data e hora antes do Java 8 utilizando formatos predefinidos.
20
21
* `SimpleDateFormat` -> Formatação de data e hora antes do Java 8 utilizando formatos mais específicos ou personalizados.
21
22
* `DateTimeFormatter` -> Formatação de data e hora após o Java 8.
Perceba que novamente o resultado muda de acordo com o `Locale`. Além disso, não é possível converter a representação da moeda brasileira com um `Locale` `en_US` ou `fr_FR`.
91
92
92
-
. O `NumberFormat` por ser utilizado para transformar Strings em percentuais, e vice-versa.
93
+
. O `NumberFormat` pode ser utilizado para transformar Strings em percentuais, e vice-versa.
No `Locale pt_BR`, temos o resultado esperado. Porém, no `Locale en_US` o `80,2%` se torna `802%`, pois a vírgula não é usada como separador de decimal.
129
+
No `Locale pt_BR` temos o resultado esperado. Porém, no `Locale en_US` o `80,2%` se torna `802%` pois a vírgula não é usada como separador de decimal.
129
130
130
131
==== DecimalFormat
131
132
132
133
Enquanto `NumberFormat` permite utilizar formatos predefinidos, `DecimalFormat` permite uma personalização maior. Um exemplo de formato para o `DecimalFormat` é `\#\##,\###.\###`.
133
134
134
-
* `#` preenche a posição com um número, ou omite se não houver nada.
135
-
* `0` preenche a posição com um número, ou 0 se não houver nada.
136
-
* `.` indica onde é a posição do separador decimal.
137
-
* `,` indica onde é a posição do separador de grupos.
135
+
* `#` -> preenche a posição com um número, ou omite se não houver nada.
136
+
* `0` -> preenche a posição com um número, ou 0 se não houver nada.
137
+
* `.` -> indica onde é a posição do separador decimal.
138
+
* `,` -> indica onde é a posição do separador de grupos.
139
+
140
+
//-- ASC: força uma nova lista não associada aos bullets acima
138
141
139
142
. É possível obter uma instância de `DecimalFormat` utilizando o construtor.
Estou executando o código onde o `Locale` padrão é `pt_BR`, por isso a saída no console apresenta vírgulas para separar grupos e pontos para separar os decimais.
160
163
161
-
. Para utilizar um `Locale` específico, é necessário instanciar um `NumberFormat` e fazer um _cast_ para `DecimalFormat`.
164
+
. Para utilizar um `Locale` específico é necessário instanciar um `NumberFormat` e fazer um _cast_ para `DecimalFormat`.
@@ -231,7 +234,7 @@ Perceba que ocorreu uma exceção ao tentar converter uma data utilizando um for
231
234
232
235
==== SimpleDateFormat
233
236
234
-
A classe `SimpleDateFormat` permite criar formatos mais personalizados para apresentar Data e Hora, como `dd/MM/yyyy HH:mm:ss`. Seguem as letras mais importantes utilizadas na formatação para o exame:
237
+
A classe `SimpleDateFormat` permite criar formatos mais personalizados para apresentar Data e Hora, como `dd/MM/yyyy HH:mm:ss`. A seguir, as letras mais importantes utilizadas na formatação para o exame:
235
238
236
239
* `y` -> Ano (2019, 19)
237
240
* `M` -> Mês (8, 08, Ago, Agosto)
@@ -248,6 +251,8 @@ Em geral (existem exceções), quanto mais letras forem utilizadas, mais extenso
248
251
* `MMM` -> Ago
249
252
* `MMMM` -> Agosto
250
253
254
+
//-- ASC: força uma nova lista não associada aos bullets acima
255
+
251
256
. É possível criar formatos personalizados para formatar um `Date` utilizando o construtor de `SimpleDateFormat`.
252
257
+
253
258
[source,java,indent=0]
@@ -285,7 +290,7 @@ Perceba a exceção ao tentar utilizar o formato incorreto.
285
290
286
291
==== DateTimeFormatter
287
292
288
-
O Java 8 traz a classe `DateTimeFormatter`, que possui várias formas de formatar e transformar `Data/Hora` em `String`, e vice-versa.
293
+
O Java 8 traz a classe `DateTimeFormatter` que possui várias formas de formatar e transformar `Data/Hora` em `String`, e vice-versa.
289
294
290
295
. É possível obter instâncias predefinidas de `DateTimeFormatter`, que representam formatos `ISO` ou `RFC`.
Para criar um `DateTimeFormatter` personalizado, é necessário conhecer o que cada letra do formato representa. Volte na seção de `SimpleDateFormat` caso não se lembre.
361
+
Para criar um `DateTimeFormatter` personalizado é necessário conhecer o que cada letra do formato representa. Volte na seção de `SimpleDateFormat` caso não se lembre.
357
362
+
358
363
359
-
. Não é possível formatar uma Data/Hora caso o objeto fornecido não tenha os campos necessários, como tentar apresentar a Data e fornecer um `LocalTime`.
364
+
. Não é possível formatar uma Data/Hora caso o objeto fornecido não tenha os campos necessários. Um exemplo seria tentar apresentar a Data e fornecer um `LocalTime`.
0 commit comments