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 días
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 Próxima 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.

ScreenCast: MVVM en Windows 8.1 Parte II – Código Tradicional

Hola a tod@s

Hemos comenzado una serie de ScreenCast que les ayudara a desarrollar aplicaciones para Windows 8 usando como patrón de desarrollo MVVM.

Capítulos Anteriores:

MVVM en Windows 8.1 – Parte I

 

 

Pueden ver el código en:https://github.com-ajimenezg-Curso-MVVM-Windows-8.1 o Descargarlo desde aquí: https://db.tt-nX4PqalF

 

Espero que les guste y si tienen alguna sugerencia de que otros temas o como hacer ciertas cosas me pueden escribir

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/

MVVM en Windows 8.1 – Parte I

 

Hola a tod@s..!!

Luego de pasar mucho tiempo sin escribir en este blog he querido volver con una serie de Video Tutoriales que se que les ayudara..!!

Espero que les guste y si tienen alguna sugerencia de que otros temas o como hacer ciertas cosas me pueden escribir, además si tienen cualquier otro comentario me lo pueden hacer llegar…!!

Nota: Tratare de subir 2 videos por semana para que puedan seguir de mejor manera el Video Tutorial.

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

Espero que les sea de mucha ayuda.

Nota: El Método de Extensión IsNullOrEmpty esta en este Link: 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;
}