// Listando os fusos horários existentes (apenas para observar os valores na collection)
ReadOnlyCollection<TimeZoneInfo> collection = TimeZoneInfo.GetSystemTimeZones();
// Mesmo estando o servidor configurado para qualquer fuso horário, o código abaixo obtém o horário de Brasília
DateTime timeUtc = DateTime.UtcNow;
TimeZoneInfo kstZone = TimeZoneInfo.FindSystemTimeZoneById("E. South America Standard Time"); // Brasilia/BRA
DateTime dateTimeBrasilia = TimeZoneInfo.ConvertTimeFromUtc(timeUtc, kstZone);
Technology (Programming, Development, Innovation, .NET, Azure) - Enjoyment (Travel, Wines, , Tips)
Mostrando postagens com marcador Dica. Mostrar todas as postagens
Mostrando postagens com marcador Dica. Mostrar todas as postagens
sexta-feira, 7 de fevereiro de 2014
sábado, 26 de abril de 2008
Dica C#: Entendo os tipos Nullable
using System;
using System.Collections.Generic;
using System.Text;
namespace Estudos_TiposNullable {
/* Autor: Leonardo Melo Santos (leonardomelosantos@gmail.com)
* Data: 26/04/2008
* Descrição: Estudos iniciais sobre "Nullable Types" do .NET 2.0
* Objetivo: Ver tipos primitivos recebendo NULL
*/
class Program {
static void Main(string[] args) {
int? i = null; // A interrogação faz parte da sintaxe
int j = 10;
Console.WriteLine("i=" + i);
Console.WriteLine("j=" + j);
// Vai dar FALSE
Console.WriteLine("(i == j) " + (i == j));
// Vai dar FALSE
Console.WriteLine("(i > j) " + (i > j));
// Vai dar FALSE
Console.WriteLine("(i < j) " + (i < j));
// Usando o "hasValue" para evitar exceções, pois se usarmos
// "xxx.Value" sem fazer o teste antes, uma exceção é levantada
if (i.HasValue) {
Console.WriteLine("'i' não é nulo");
} else {
Console.WriteLine("'i' é nulo");
}
// Usando o o operador "??"
int? y;
y = i ?? 10; //Retorna 10 se "i" for NULL, senão retorna o valor de "i"
Console.WriteLine("y=" + y.ToString());
// K será igual a NULL
int? k = i + j;
Console.WriteLine("k=i+j");
Console.WriteLine("k=" + k.ToString());
// Se "i" for NULL, será retornado o valor default do "int"
// Senão, retorna o valor atribuído a "i"
int x = i.GetValueOrDefault();
Console.WriteLine("x=" + x.ToString());
}
}
}
sábado, 20 de outubro de 2007
Dica C#: desenhando uma curva de Bèzier no browser
Com C#, podemos facilmente desenhar dinamicamente uma curva de Bèzier. O trecho de código-fonte abaixo, pode ser inserido, por exemplo, no evento Click de qualquer botão de um WebForm.
// Criando o objeto (através da classe Bitmap), que representa
// a imagem gerada dinamicamente pela aplicação.
Bitmap imagem = new Bitmap(400, 400);
// Obtendo uma referência da Classe Graphics apartir da imagem recém instanciada.
// Esse objeto possui métodos que lhe permite formar na memória todo o conteúdo do bitmap.
Graphics g = Graphics.FromImage(imagem);
// Criando o objeto Pen. O construtor está recebendo a cor da linha e sua espessura
Pen canetaPreta = new Pen(Color.Black, 3);
// Criando os pontos para a formação da curva
PointF start = new PointF(100.0F, 100.0F);
PointF control1 = new PointF(200.0F, 10.0F);
PointF control2 = new PointF(350.0F, 50.0F);
PointF end1 = new PointF(500.0F, 100.0F);
PointF control3 = new PointF(600.0F, 150.0F);
PointF control4 = new PointF(650.0F, 250.0F);
PointF end2 = new PointF(500.0F, 300.0F);
PointF[] pontosDeBezier = { start, control1, control2, end1,
control3, control4, end2 };
// Desenhando a curva de Bèzier
g.FillRectangle(Brushes.White, 0, 0, 400, 400);
g.DrawBeziers(canetaPreta, pontosDeBezier);
imagem.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Gif);
g.Dispose();
imagem.Dispose();
Dica C#: Gerando dinamicamente imagens no browser
Com muita facilidade, podemos gerar imagens dinamicamente no browser com C#.NET. O trecho de código-fonte abaixo, pode ser inserido por exemplo, no evento Click de qualquer botão de um WebForm.
// Criando o objeto (através da classe Bitmap), que representa
// a imagem gerada dinamicamente pela aplicação.
Bitmap imagem = new Bitmap(250, 50);
// Obtendo uma referência da Classe Graphics apartir da imagem recém instanciada.
// Esse objeto possui métodos que lhe permite formar na memória todo o conteúdo
// do bitmap.
Graphics g = Graphics.FromImage(imagem);
// A partir de agora, você deve usar os recursos que
// a classe Graphics dispõe, que são muitos.
g.FillRectangle(Brushes.Brown, 0, 0, 250, 50); //Desenha um retângulo preenchido com cinza g.DrawRectangle(Pens.Black, 0, 0, 249, 49); // Desenha o contorno de um retângulo
//Obtendo uma imagem externa
System.Drawing.Image imagemExterna = System.Drawing.Image.FromFile(Server.MapPath("exemploImagemGif.gif"));
g.DrawImageUnscaled(imagemExterna, 2, 2); // Adicionando a imagem externa
Font fonte = new Font("Rockwell Extra Bold", 10, FontStyle.Regular);
g.DrawString("Gerando imagem", fonte, Brushes.White, 60, 20);
// Cria a imagem para no HTML via stream
imagem.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Gif);
g.Dispose();
imagem.Dispose();
domingo, 11 de dezembro de 2005
Dica Java - Casting de tipos primitivos
Casting, no que diz respeito às linguagens de programação, tem o sentido moldar um objeto ou tipo primitivo em um outro molde. Normalmente chamamos de conversão. Este artigo focará os tipos primitivos usando no Java. Apresentemos os tipos primitivos do Java:
O diagrama abaixo representa a "hierarquia" de conversão.

Vemos neste diagrama que somente os tipos byte, short e char podem ser convertidos para o tipo int. Vemos também que todos os tipos podem ser convertidos para o double. O diagrama torna-se agora compreensível para os demais tipos. Tanta definição, tanto "decoreba"... mas como converter? Existe a possibilidade de ocorrerem erros? Vejamos um exemplo:
Quando fazemos (short)b , estamos convertendo a variável b em short. Caso não existe a obediência da hierarquia mostrada neste artigo, haverá perda de dados (inconsistência de dados). Um detalhe interessante em casting de tipos primitivos é a conversão utilizando o tipo CHAR, é utilizado o seu código ASCII no processo.
Existe a possibilidade de convertermos objetos. Neste caso, poderíamos tratar não simplesmente de uma conversão e sim de um novo molde ao objeto convertido. É como se pudéssemos moldar um objeto CachorroDeGuarda para um objeto CachorroJaTreinado. Existe a necessidade de haver semelhança entre essas classes (objetos).
|
O diagrama abaixo representa a "hierarquia" de conversão.
Vemos neste diagrama que somente os tipos byte, short e char podem ser convertidos para o tipo int. Vemos também que todos os tipos podem ser convertidos para o double. O diagrama torna-se agora compreensível para os demais tipos. Tanta definição, tanto "decoreba"... mas como converter? Existe a possibilidade de ocorrerem erros? Vejamos um exemplo:
Início do arquivo casting.java
|
public class casting {
public static void main(String[] args) {
char c;
byte b;
short s;
int i;
// Conversão de Short para Byte
s = 200;
b = (byte)s; // ocorrerá perda de dados
System.out.println(b);
// Conversão de Byte para Short
b = 100;
s = (short)b;
System.out.println(s);
// Conversão de Char para Int
c = 'a'; // código ASCII = 97
i = (int)c; // utilizará o código ASCII
System.out.println(i);
}
}
|
Fim do arquivo casting.java
|
Quando fazemos (short)b , estamos convertendo a variável b em short. Caso não existe a obediência da hierarquia mostrada neste artigo, haverá perda de dados (inconsistência de dados). Um detalhe interessante em casting de tipos primitivos é a conversão utilizando o tipo CHAR, é utilizado o seu código ASCII no processo.
Existe a possibilidade de convertermos objetos. Neste caso, poderíamos tratar não simplesmente de uma conversão e sim de um novo molde ao objeto convertido. É como se pudéssemos moldar um objeto CachorroDeGuarda para um objeto CachorroJaTreinado. Existe a necessidade de haver semelhança entre essas classes (objetos).
Dica Java: Manipulando datas no J2SE e J2ME
1. Formatando um objeto Date (J2SE)
// Este será o objeto que fará a formatação
SimpleDateFormat formatadorData;
// String auxiliar que receberá a data formatada
String minhaDataFormatada = null;
// Data atual. Instanciando uma Data (a data e hora são atualizado
// apenas quando re-instanciamos o objeto, usando o operado "new").
Date minhaData = new Date();
formatadorData = new SimpleDateFormat("dd/MM/yyyy");
minhaDataFormatada = formatadorData.format(minhaData);
System.out.println(minhaDataFormatada);
formatadorData = new SimpleDateFormat("MM/dd/yy");
minhaDataFormatada = formatadorData.format(minhaData);
System.out.println(minhaDataFormatada);
formatadorData = new SimpleDateFormat("dd/MM/yy hh:mm:ss");
minhaDataFormatada = formatadorData.format(minhaData);
System.out.println(minhaDataFormatada);
2. Validando uma String e convertendo para Date (J2SE)
public static boolean dataValida(String data) {
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
Date minhaDataConvertida = null;
df.setLenient(false);
try {
minhaDataConvertida = df.parse(data);
} catch (ParseException pex) {
return false;
}
return true;
}
3. Personalizando um objeto Date (J2SE/J2ME)
// Instanciando um objeto do tipo Date. Neste caso ele está
// utilizando a data atual, mas poderia ser qualquer objeto do
// tipo Date.
Date minhaData = new Date();
// Inicializando o "Calendar". Iremos utilizá-lo para pegar
// o dado desejado do objeto "Date".
Calendar meuCalendario = Calendar.getInstance();
// "Setando" os milisegundos do objeto "Date" para o "Calendar".
// Poderia ser qualquer objeto do tipo Date. Exemplo: Quando em J2ME,
// trabalhamos com DateField e queremos manipular, utilizamos
// o método getDate() para retornar um objeto do tipo "Date".
meuCalendario.setTime(minhaData);
// Escrevendo as inforações
System.out.println("Dia: " + meuCalendario.get(Calendar.DATE));
System.out.println("Mês: " + (meuCalendario.get(Calendar.DAY_OF_MONTH) + 1));
System.out.println("Ano: " + meuCalendario.get(Calendar.YEAR));
System.out.println("Dia da semana: " + meuCalendario.get(Calendar.DAY_OF_WEEK));
System.out.println("Horas: " + meuCalendario.get(Calendar.HOUR ));
System.out.println("Minutos: " + meuCalendario.get(Calendar.MINUTE ));
System.out.println("Segundos: " + meuCalendario.get(Calendar.SECOND ));
System.out.println("Milisegundos: " + meuCalendario.get(Calendar.MILLISECOND ));
4. Pegando a data atual J2ME
Calendar meuCalendario = Calendar.getInstance();
System.out.println("Dia: " + meuCalendario.get(Calendar.DATE));
System.out.println("Mês: " + (meuCalendario.get(Calendar.DAY_OF_MONTH) + 1) );
System.out.println("Ano: " + meuCalendario.get(Calendar.YEAR));
Assinar:
Postagens (Atom)
Afinal, quais benefícios são obtidos com o SOLID?
Não se trata de um padrão. É um fundamento da orientação a objetos. Os princípios SOLID devem ser aplicados para se obter os benefícios da ...
-
Dica de ouro: Devemos evitar a herança como forma de economizar código, pois pode produzir um alto acoplamento desnecessário. Em geral, na o...
-
Numa estratégia de marketing, de nada adianda estar nas mídias sociais sem ao menos fazer um monitoramento nelas. O ato de monitorar sua m...
-
HSBS Informática, empresa do Grupo Nagem, celebra, neste mês de dezembro, 25 anos de atuação. Mira agora o mercado internacional. De acordo ...