Tips C#: Calcular Edad y saber el Próximo cumpleaños


Hola

En este fragmento de código les mostrare como sacar la edad y calcular el próximo cumpleaños.

public string RetornarMensajeCumpleanio()
{
int diaCumple = 4;//Dia del Cumpleanios
int mesCumple = 4;//Mes de Cumple 4=Abril
int anioCumple = 1984; //Anio de Cumple
DateTime fechaNacimiento = new DateTime(anioCumple, mesCumple, diaCumple);

//Se calcula la Edad Actual A partir de la fecha actual Sustrayendo la fecha de nacimiento
//esto devuelve un TimeSpan por tanto tomaremos los Dias y lo dividimos en 365 dias
int edad = (DateTime.Now.Subtract(fechaNacimiento).Days / 365);

DateTime proximoCumple;
//Define el proximo Cumple, En caso de que el mes sea menor al Mes Actual se busca el Proxima fecha que seria del año que viene
//es por ello el AddYear(1)
//En caso de ser mayor se toma el año actual
if (DateTime.Now.Month <= mesCumple && DateTime.Now.Day <= diaCumple)
proximoCumple = new DateTime(DateTime.Now.AddYears(1).Year, mesCumple, diaCumple);
else
proximoCumple = new DateTime(DateTime.Now.Year, mesCumple, diaCumple);


//Definiremos los dias faltantes para el proximo cumple
TimeSpan faltan = proximoCumple.Subtract(DateTime.Now);

//Ahora Elaboramos el Mensaje
StringBuilder sb = new StringBuilder();
sb.AppendFormat("Usted Tiene {0} Años ", edad);
sb.AppendFormat("y tu Próximo Cumpleaños es: {0} Días", faltan.Days);
sb.AppendFormat(", {0} Horas ", faltan.Hours);
sb.AppendFormat("y {0} Minutos ", faltan.Minutes);

return sb.ToString();
}

Como verán es un ejemplo simple, espero que les sea de utilidad.

Tips JQuery: Mostrar y Ocultar un mensaje automáticamente


Hola a tod@s

 

La idea de este truco es mostrarle lo sencillo que es hacer aparecer un mensaje y que se oculte de manera automática después de cierto tiempo.

Código HTML:

<button id=”btn”>Esperar 1 Segundos</button>
<div id=”message” >Test</div>

 

Código JavaScript:

$( “#btn” ).click(function() {
    setTimeout(showTooltip, 1000)
});

function showTooltip()
  {
       $(“#message”).show(“slow”);
       setTimeout(hideTooltip, 3000)
  }

function hideTooltip()
  {
   $(“#message”).hide(“slow”);
  }

 

Código CSS:

#message
    {
        background-color:blue;
        display: none;
        margin: 3px;
        width: 80px;
        float: left;
        text-align: center;
    }

 

Link del Resultado: http://jsfiddle.net/ajimenezg/Rhnxt/6/embedded/result/

Tips SilverLight: Behavior para colocar en Mayuscula el Texto de un TextBox


Hola a tod@s

A veces deseamos que el texto que escribe el usuario en un TextBox este de una ves en mayúscula, es por ello que les traigo este Behavior muy sencillo para que lo puedan usar.

using System.Windows;
using System.Windows.Controls;
using System.Windows.Interactivity;

namespace MiProyectoSilverLight.Behaviors
{
    public class UpperCaseAction : TriggerAction<TextBox>
    {
        protected override void Invoke(object parameter)
        {
           //Detectamos la posicion del cursor
            var selectionStart = AssociatedObject.SelectionStart;
            var selectionLenght = AssociatedObject.SelectionLength;
            //Colocamos el Texto en Mayuscula
            AssociatedObject.Text = AssociatedObject.Text.ToUpper();
            //Colocamos el Cursor al final
            AssociatedObject.SelectionStart = selectionStart;
            AssociatedObject.SelectionLength = selectionLenght;
        }
    }
}

Espero que le sea de ayuda.

Tips SilverLight: Guardar y Leer Cookies


Existen ocasiones que deseamos acceder a una Cookie o sencillamente guardar algo de información de poco relevancia, en mi caso no lo uso prefiero el Almacenamiento Aislado (Isolated Storage) pero en su momento alguien me pregunto sobre este punto y pues aquí les dejo los métodos de extensión.

  public static class ExtensionCookie
    {
        /// <summary>
        /// Obtener una cookie por su nombre
        /// </summary>
        /// <param name="document">El <c>HtmlDocument</c></param>
        /// <param name="cookieName">Nombre de la Cookie</param>
        /// <returns>El contenido de la cookie</returns>
        public static string GetCookie(this HtmlDocument document, string cookieName)
        {
            // Obtener token de cookie
            string cookies = document.Cookies;
            int idx = cookies.IndexOf(cookieName + "=");
            string val = "";
            if (idx == 0 || (idx > 0 && (cookies[idx - 1] == ';' 
                || cookies[idx - 1] == ' ')))
            {
                int lastIdx = cookies.IndexOf(';', idx);
                if (lastIdx == -1)
                {
                    lastIdx = cookies.Length;
                }

                int start = idx + cookieName.Length + 1;
                val = cookies.Substring(start, lastIdx - start);
                return HttpUtility.UrlDecode(val);
            }
            else
            {
                return string.Empty;
            }
        }

        /// <summary>
        /// Asignar valor a la cookie.
        /// </summary>
        /// <param name="document">El <c>HtmlDocument</c></param>
        /// <param name="cookieName">nombre de la cookie</param>
        /// <param name="value">El valor de la Cookie</param>
        /// <param name="expireDays">Dias de Expiracion</param>
        public static void SetCookie(this HtmlDocument document, string cookieName
            , string value, int? expireDays)
        {
            StringBuilder cookieDefinition = new StringBuilder(cookieName);
            cookieDefinition.Append('=');
            cookieDefinition.Append(HttpUtility.UrlEncode(value));
            if (expireDays.HasValue)
            {
                cookieDefinition.AppendFormat(";expires={0:R}"
                    , DateTime.Now.AddDays(expireDays.Value).ToUniversalTime());
            }

            document.Cookies = cookieDefinition.ToString();
        }

    }

Aquí les dejo un ejemplo  de como usar este código.

        void btnSetCookie_Click(object sender, RoutedEventArgs e)
        {
            TextBox txtCookie = new TextBox();
            txtCookie.Text = "Prueba de Asignar Valor a una Cookie";
            System.Windows.Browser.HtmlDocument doc = new HtmlDocument();
            doc.SetCookie("PruebaCookie", txtCookie.Text, 2);
            //doc.SetCookie("PruebaCookie", txtCookie.Text, null);
        }

        void btnGetCookie_Click(object sender, RoutedEventArgs e)
        {
            System.Windows.Browser.HtmlDocument doc = new HtmlDocument();
            TextBox txtCookie = new TextBox();
            txtCookie.Text = doc.GetCookie("PruebaCookie");            
        }

Espero que le sea de mucha utilidad.

Tips SilverLight: Encriptar y Desencriptar (Base64)


Aquí les dejo unos métodos de extensión simples para la encriptación y des encriptación:

 

    public static class ExtensionesSeguridad
    {
        public static string EncrytedString(this string _stringToEncrypt)
        {
            string result = string.Empty;
            byte[] encryted = System.Text.Encoding.Unicode.GetBytes(_stringToEncrypt);
            result = Convert.ToBase64String(encryted);
            return result;
        }

        public static string DecrytedString(this string _stringToDecrypt)
        {
            string result = string.Empty;
            byte[] decryted = Convert.FromBase64String(_stringToDecrypt);
            result = System.Text.Encoding.Unicode.GetString(decryted, 0, decryted.ToArray().Length);
            return result;
        }
    }

Espero que le sea de mucha utilidad.

Nota: aquí les dejo un Enlace de encriptación mas avanzado: http://www.esasp.net/2010/08/encriptar-y-desencriptar-con-c-metodo.html

Tips SilverLight: AddRange a un ObservableCollection


En ocasiones me he encontrado con personas que me preguntan si existe una manera de tener un AddRange en un ObservableCollection así como lo tiene el List<T>, pues mi respuesta siempre ha sido este código. Quizás no sea el mas optimo o quizás hay mejores truco pero hasta ahora me ha funcionado muy bien, además que me he ahorrado muchos ForEach Sonrisa.

    public static class ExtensionesColecciones
    {
        public static void AddRange<T>(this ObservableCollection<T> listOriginal
            , IEnumerable<T> collection)
        {
            if (listOriginal == null)
                listOriginal = new ObservableCollection<T>();//En caso de que aun no tenga una instancia

            //Verificamos que sea diferente de null o vacio
            if (!collection.IsNullOrEmpty<T>())
            {
                foreach (var item in collection)
                    listOriginal.Add(item);
            }          
        }
     }

Nota: El Método de Extensión IsNullOrEmpty esta en este Link: https://alexjimenez.wordpress.com/2012/08/03/tips-silverlight-comprobar-si-una-coleccion-esta-vacia-o-nula/

Tips SilverLight: Comprobar si una Coleccion esta vacia o Nula


Existen momentos que queremos saber si una Colección sea un ObservableCollection<T> o un List<T> o cualquiera que herede de una interface IEnumerable<T> puede usar este método de extensión.

    public static class ExtensionesColecciones
    {
        public static bool IsNullOrEmpty<T>(this IEnumerable<T> collection)
        {
            if (collection == null) //null
                return true;
            if (collection.Count() < 1) //empty
                return true;

            return false;
        }
    }

 

Espero que le sea de Ayuda.

Tips SilverLight: Validaciones con Expresiones Regulares (IP, E-Mail, URL)


Existen ocasiones que se desea validar si el texto introducido en un TextBox o que viene de la base de datos tienen el formato valido y es por ello que les traigo estos métodos de extensión para facilitar un poco mas la vida, espero que les sea de mucha utilidad.

    public static class ExtensionesValidacion
    {         
        public static bool IsValidUrl(this string text)
        {
            return Regex.IsMatch(text, @"http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?");
        }
        public static bool IsValidEmailAddress(this string test)
        {
            return Regex.IsMatch(test, @"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$");
        }
        public static bool IsValidIPAddress(this string test)
        {
            return Regex.IsMatch(test,
                    @"\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\
                    .(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\
                    .(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\
                    .(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b");
        }
    }

Ejemplo de como lo pueden usar:

TextBox txt=new TextBox();
string url="http://ajdev.net";

if (url.IsValidUrl())
{
    txt.Text = url;
}
else
{
    txt.Text = string.Empty;
}

 

Tips SilverLight: Saber el Primer y Ultimo día del Mes


Muchas ocasiones nos encontramos que tenemos una fecha y queremos obtener el primer y el ultimo día del Mes, pues aquí les dejo estos simple ejemplos que muy probablemente alguien lo hizo mejor, pero igual se los dejo para facilitarles un poco la búsqueda.

public static class ExtensionesFecha
    {
        public static string PrimerDiaMes(this DateTime date)
        {
            return new DateTime(date.Year, date.Month, 1).ToString("dd");
        }

        public static string UltimoDiaMes(this DateTime date)
        {
            return new DateTime(date.Year, date.Month + 1, 1).AddDays(-1).ToString("dd");
        }
    }
Ejemplo de como Aplicarlo:
            string primerDia = DateTime.Now.PrimerDiaMes();
            string ultimoDia = DateTime.Now.UltimoDiaMes();

Con este simple ejemplo que a su imaginación de como quieren obtener el dato, es decir, si quieren que le diga hasta que día de la semana cae ese primer o ultimo di del mes eso lo pueden complementar con el formateo de la fecha: http://www.csharp-examples.net/string-format-datetime/

Como les dije es un ejemplo simple y espero que les sea de mucha utilidad.

Tips SilverLight: Extraer el Color Hexadecimal a String


En el articulo anterior les mostré como asignar un String a Color pero en esta ocasión queremos extraer el String de ese color para guardarlo en la Base de Datos como haríamos esto? pues simple aquí les dejo el método:

     public static string ToHexStringFromColor(this Color c)
        {
            return string.Format("#{0}{1}{2}{3}",
                    c.A.ToString("X2"),
                    c.R.ToString("X2"),
                    c.G.ToString("X2"),
                    c.B.ToString("X2"));
        }

Ahora le dejo el ejemplo de como usar este método de extensión, además lo usare con el mismo ejemplo que usamos en el articulo anterior.

      TextBlock textBlock = new TextBlock();
      textBlock.Foreground = new SolidColorBrush("#FF7277FE".ToColor());
      Color c = (textBlock.Foreground as SolidColorBrush).Color;
      textBlock.Text = string.Format("Color: {0}", c.ToHexStringFromColor());

 

Tips SilverLight: Obtener Color de un Hexadecimal


Muchas veces estamos creando un control desde código y no tenemos el color de manera directo si no un valor proveniente de la base de datos algo así como el siguiente ejemplo:

      TextBlock textBlock = new TextBlock();
      textBlock.Text="Prueba de Foreground";
      textBlock.Foreground = new SolidColorBrush("#FF7277FE"); //Esto esta Mal

 

Donde el código anterior esta mal por que el SolidColorBrush recibe como parámetro un dato de tipo Color, es por ello que se debe tener el siguiente código que lo declare en una clase estática para así tener mi método de extensión.

public static class ExtensionesColores
    {
        public static Color ToColorFromHex(this string s)
        {
            if (s.StartsWith("#"))
            {
                s = s.Substring(1);
            }
            byte a = System.Convert.ToByte(s.Substring(0, 2), 16);
            byte r = System.Convert.ToByte(s.Substring(2, 2), 16);
            byte g = System.Convert.ToByte(s.Substring(4, 2), 16);
            byte b = System.Convert.ToByte(s.Substring(6, 2), 16);
            return Color.FromArgb(a, r, g, b);

        }
public static Color ToColorFromString(this string colorString)
   {
      Type colorType = (typeof(Colors));
      if (colorType.GetProperty(colorString) != null)
      {
         object color = colorType.InvokeMember(colorString
                    , BindingFlags.GetProperty, null, null, null);
         if (color != null)
          {
            return (Color)color;
          }
      }
      else
      {
        try
          {
            System.Text.StringBuilder sb = new System.Text.StringBuilder();
sb.Append("<Line xmlns=\http://schemas.microsoft.com/winfx/2006/xaml/presentation\");
          sb.Append("  xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" ");
          sb.AppendFormat(" Fill=\"{0}\" />", colorString);

              Line lne = (Line)XamlReader.Load(sb.ToString());
              return (Color)lne.Fill.GetValue(SolidColorBrush.ColorProperty);
           }
             catch { }
          }
       throw new InvalidCastException("Color no definido");
    }

Lo que en corrección al código que mostramos al inicio de declarar un control quedaría de esta manera:

         TextBlock textBlock = new TextBlock();
         textBlock.Text = "Prueba de Foreground";
         textBlock.Foreground = new SolidColorBrush("#FF7277FE".ToColorFromHex());

 

Espero que le sea de mucha ayuda.

Tips & Trucos: Convertir Segundos a Minutos, Horas y Días – VB y C#


Hola a Todos,

Aquí les dejo unos simples truquillos de convertir Segundos a Minutos, Horas y Días. Utilizando TimeSpan.

Nota: el Response.Write es por que utilice una pagina ASP.net y en el Load cargaba el resultado 🙂

En Visual Basic:

Dim segundos As Double = 7950 'Los Segundos a Probar

'Prueba 1: Total Dias, Total de Horas, Total Minutos, Total Segundos
Dim t As New TimeSpan

Response.Write("Prueba 1: Dias: " + t.FromSeconds(segundos).TotalDays.ToString() +
 " Tiempo: " + t.FromSeconds(segundos).TotalHours.ToString() + ":" +
t.FromSeconds(segundos).TotalMinutes.ToString() + ":" + t.FromSeconds(segundos).TotalSeconds.ToString())

'Prueba 2: Dias, Hora, Minutos y Segundos
Dim t2 As TimeSpan = TimeSpan.FromSeconds(segundos)
Response.Write("<br> Prueba 2: Dias: " + t2.Days.ToString() + " Tiempo: " +
t2.Hours.ToString() + ":" + t2.Minutes.ToString() + ":" +
t2.Seconds.ToString())

En C#:

double segundos=7950 ; //Los Segundos a probar
TimeSpan t =new TimeSpan;
//Prueba 1: Total Dias, Total de Horas, Total Minutos, Total Segundos
Response.Write("Prueba 1: Dias: " + t.FromSeconds
(segundos).TotalDays.ToString() + " Tiempo: " + t.FromSeconds
(segundos).TotalHours.ToString() + ":" + t.FromSeconds
(segundos).TotalMinutes.ToString() + ":" + t.FromSeconds
(segundos).TotalSeconds.ToString());

TimeSpan t2= TimeSpan.FromSeconds(segundos);
//Prueba 2: Dias, Hora, Minutos y Segundos
Response.Write("<br> Prueba 2: Dias: " + t2.Days.ToString() + " Tiempo: " +
t2.Hours.ToString() + ":" + t2.Minutes.ToString() + ":" +
t2.Seconds.ToString());

 

Compartir este Blog :

Post Cruzado con el blog http://geeks.ms/blogs/ajimenez

Tips & Trucos: Como generar palabras claves en ASP.net (Tags) – VB y Csharp


En muchas ocasiones me he preguntado como hacen los sitios Web para separar los Tags (Palabras Claves) e incluirlo en la base de datos y que a la hora de hacer una búsqueda se pueden usar estos Tags como una base, es decir, Este articulo le di los siguientes Tags: VB, Csharp. como puedo yo buscar por un Tags en especifico si al momento de escribir el articulo solo había una caja de texto y un mensaje que decir: si son varios Tags, deben separarse con comas. Sigue leyendo