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

[C#] Como saber o horário de Brasília estando o servidor em qualquer fuso horário (Recomendado para quem hospeda site no Windows Azure)

// 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);

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:

Descrição
Declaração
Detalhes
Lógico
boolean variavel = true;
Aceita true ou false.
Caracter
char variavel = 'a';
char variavel = 97;
É possível atribuir um único caractere dentro de dois apóstrofos ou simplemente o seu código ASCII
Byte
byte variavel = 100;
Tipo númerico que aceita números entre -128 e 127
Short
short variavel = 2000;
Suporta números entre -32.768 e 32.767
Inteiro
int variavel = 400050;
Aceita números que variam de -2.147.483.648 até 2.147.483.647
Longo
long variavel = 100780000;
Número longo que suporta valores entre
-9.223.372.036.854.775.808 e
9.223.372.036.854.775.807
Ponto Flutuante
float variavel = 5.789f;
Simples precisão (7 casas decimais)
Duplo
double variavel = 0.789;
Dupla presição (15 casas decimais)

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));

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 ...