Como Corrigir Variação de dias via TimeSpam

19/02/2009

Luiz escreveu (Ref. áo Chamado Anterior - Componente Trial)   Consideração: Usando TimeSpan pode dar uma variação quanto as horas, pq as vezes faltam 48 horas para expiração, o TimeSpan assume que faltam 2 dias, mas de faltam 47 horas para a expiração, o que para nós são dois dias, para o TimeSpan, é apenas um dia.   Duvida:Teria alguma forma de corrigir isto ou seja (47 horas para a expiração, o que para nós são dois dias, para o TimeSpan, é apenas um dia.)   Fico no aguardo e desde já agradeço
Luiz Franco

Luiz Franco

Curtidas 0

Respostas

Luiz Maia

Luiz Maia

19/02/2009

Olá Xará,   Segue uma solução para o Bug do TimeSpan, no caso não uso mais o TimeSpan:   protected void Page_Load(object sender, EventArgs e) { string dataExpiracao = "01/01/2010"; // desta forma começa a contagem somente no mesmo ano que vai expirar a DLL if (DateTime.Now.Year == Convert.ToDateTime(dataExpiracao).Year) { // verifica se o mês é o mesmo if (DateTime.Now.Month == Convert.ToDateTime(dataExpiracao).Month) { int diasRestantes = DateTime.Now.Day - Convert.ToDateTime(dataExpiracao).Day; if (DateTime.Now.Day < Convert.ToDateTime(dataExpiracao).Day || (DateTime.Now.Day == Convert.ToDateTime(dataExpiracao).Month && DateTime.Now.Day < Convert.ToDateTime(dataExpiracao).Day)) diasRestantes--; } } }   Abraços Luiz Maia
GOSTEI 0
Luiz Maia

Luiz Maia

19/02/2009

Ola Luiz,   Conseguiu usar o metodo que te mandei? Aguardo seu retorno.   Abraços Luiz Maia
GOSTEI 0
Luiz Maia

Luiz Maia

19/02/2009

Como não obtivemos respostas,estamos fechando este chamado. Continuamos a sua disposição.   Abraços   Att Luiz Maia
GOSTEI 0
Luiz Franco

Luiz Franco

19/02/2009

Olá LUIZ  - Boas Xará bem só mais um detalhe aonde e como eu encaixaria esse metodo timespam para corrigir o fator de dias no meu codigo do Trialware abaixo, fico no aguardo e desde já agradeço   using System; using System.Collections.Generic; using System.Text; using System.Web; using System.Web.UI; using System.IO; using WebProdutos.Trialware; namespace WebProdutos.Trialware { public class Validacao { static string meudado; public void VerificaValidade(string mydado) { meudado = mydado; string valorParametroExpiracao = "17/02/2009"; // Aqui vc pega o valor de expiração, seja do arquivo, de registro ou de banco de dados //Dados para valor de Dias que faltam a expirar string valorParametroAvisoExpiracao = "17/02/2009";//Aqui vc pega o valor de aviso para expiração DateTime DTFinal = Convert.ToDateTime(valorParametroAvisoExpiracao); DateTime DTInicial = DateTime.Now; TimeSpan diff = DTFinal - DTInicial; string diasaviso = "3";//aqui você pega o valor de dias de mostragem do aviso da expiração //Final de Dados para valor de Dias que Faltam a expirar // Se o valorParametroExpiracao for uma data maior que hj, a DLL pode ser usada até a data // Se o valorParametroExpiracao for uma data "31/12/2099" (por exemplo), a DLL já foi liberada com a chave informada corretamente // if (Convert.ToDateTime(Descriptografar(valorParametroExpiracao)) > DateTime.Now) if(Convert.ToDateTime(valorParametroExpiracao) > DateTime.Now) { //Inicio da Rotina Para Exibição de msgs //baseados nos Parâmetros valorParametroAvisoExpiracao ácima //e diasaviso (Qtde de dias antes do Parametro valorParametroAvisoExpiracao //Que deve-se iniciar á mostragem das msgs que faltam dias para expirar if (Convert.ToInt32(diff.TotalDays) <= Convert.ToInt32(diasaviso)) { if (Convert.ToInt32(diff.TotalDays) == 0) { HttpContext.Current.Response.Write("Faltam algumas Horas para expirar sua licença!!!"); } if (Convert.ToInt32(diff.TotalDays) > 1) { HttpContext.Current.Response.Write("Faltam " + Convert.ToInt32(diff.TotalDays) + " dias para expirar sua licença!!!"); } if (Convert.ToInt32(diff.TotalDays) == 1) { HttpContext.Current.Response.Write("Falta " + Convert.ToInt32(diff.TotalDays) + " dia para expirar sua licença!!!"); } } //Fim da Rotina para Exibição de msgs MetodoDaSuaDll(); } else { DllExpirada(); } } public bool VerifivaChave(string key) { // aqui vc verifica se a chave que ele digitou bate com a que vc envio e valida a DLL, ou não if (key == "3216576513268432") // exemplo de chave valida { // ja que a chave é valida, vc deve alterar o valor da valorParametroExpiracao no lugar que vc gravou (arquivo txt, registro ou banco de dados) //Como Altero o valorParametroExpiracao(já que no caso ele teria que sêr um valor data infinito caso a chave fosse válida) teria um video auto explicativo como fz td esse processo tanto do componente //como da WebApp em que meu componente com chave trial será utilizado return (true); } else { // exibe uma mensagem falando que a chave está errada HttpContext.Current.Response.Write("Chave Inválida - Por Favor entre com outra chave"); // vc tb pode contar o nº de tentativas e bloquear depois de algumas tentativas erradas. return (false); } } static void MetodoDaSuaDll()//Onde está MetodoDaSuaDll() substituo por meuMetodo(string dado, Label IDLabel, bool verdadeirooufalse), et....ou seja o metodo de minha aplicação { // aqui faz todo o processo que o DLL é responsavel string testachave = string.Empty; if (HttpContext.Current != null) { testachave = HttpContext.Current.Request.UserHostAddress; HttpContext.Current.Response.Write(testachave+meudado); }   } public void DllExpirada() { // Informe aqui ao usuário que a data da expiração da DLL foi excedida // e ele deve adquirir a licença agora e depois vc abandona a DLL sem executar o metodos dela HttpContext.Current.Response.Write("Sua Dll foi expirada por favor adquira a licença"); } //E como eu faria neste Aquele metodo de quando faltar determinados dias para a minha webapp expirar //Aparecer uma msg onde faltam X dias para sua DLL expirar por favor adquira ou renove a licença //pelo site.... } }
GOSTEI 0
Luiz Maia

Luiz Maia

19/02/2009

Opa blz?   Vc deverá usa-lo para retornar o numero de dias que estão faltando para a expiração da DLL, acho recomendável vc não usar mais o:   DateTime DTFinal = Convert.ToDateTime(valorParametroAvisoExpiracao); DateTime DTInicial = DateTime.Now; TimeSpan diff = DTFinal - DTInicial; E usar o método que que vai retornar os dias faltantes. Aguardo seu retorno. Abraços   Att Luiz Maia
GOSTEI 0
Luiz Franco

Luiz Franco

19/02/2009

Consegui adaptar o método do timespam ao meu componente veja como ficou e em cima disto surgiu mais uma duvida   using System; using System.Collections.Generic; using System.Text; using System.Web; using System.Web.UI; using System.IO; using WebProdutos.Trialware; namespace WebProdutos.Trialware { public class Validacao { static string meudado; static string valorParametroExpiracao; static string valorReferencia; static string resultadodias; static string faltadias; static string diasaviso; //static int negativo; //static int positivo; public void VerificaValidade(string mydado) { meudado = mydado; valorReferencia = "24/2/2009"; valorParametroExpiracao = "28/2/2009"; // Aqui vc pega o valor de expiração, seja do arquivo, de registro ou de banco de dados //Dados para valor de Dias que faltam a expirar string valorParametroAvisoExpiracao = "28/2/2009";//Aqui vc pega o valor de aviso para expiração DateTime DTFinal = Convert.ToDateTime(valorParametroAvisoExpiracao); DateTime DTInicial = DateTime.Now; TimeSpan diff = DTFinal - DTInicial; if (DateTime.Now > Convert.ToDateTime(valorReferencia)) { diasaviso = DiasRestantes(); } //else //{ // string diasaviso = "3"; //} //aqui você pega o valor de dias de mostragem do aviso da expiração //Final de Dados para valor de Dias que Faltam a expirar // Se o valorParametroExpiracao for uma data maior que hj, a DLL pode ser usada até a data // Se o valorParametroExpiracao for uma data "31/12/2099" (por exemplo), a DLL já foi liberada com a chave informada corretamente // if (Convert.ToDateTime(Descriptografar(valorParametroExpiracao)) > DateTime.Now) if(Convert.ToDateTime(valorParametroExpiracao) > DateTime.Now) { //Inicio da Rotina Para Exibição de msgs //baseados nos Parâmetros valorParametroAvisoExpiracao ácima //e diasaviso (Qtde de dias antes do Parametro valorParametroAvisoExpiracao //Que deve-se iniciar á mostragem das msgs que faltam dias para expirar if (Convert.ToInt32(diff.TotalDays) <= Convert.ToInt32(diasaviso)) { if (Convert.ToInt32(diff.TotalDays) == 0) { HttpContext.Current.Response.Write("Faltam algumas Horas para expirar sua licença!!!"); } if (Convert.ToInt32(diff.TotalDays) > 1) { HttpContext.Current.Response.Write("Faltam " + Convert.ToInt32(diff.TotalDays) + " dias para expirar sua licença!!!"); } if (Convert.ToInt32(diff.TotalDays) == 1) { HttpContext.Current.Response.Write("Falta " + Convert.ToInt32(diff.TotalDays) + " dia para expirar sua licença!!!"); } } //Fim da Rotina para Exibição de msgs MetodoDaSuaDll(); } else { DllExpirada(); } } public bool VerifivaChave(string key) { // aqui vc verifica se a chave que ele digitou bate com a que vc envio e valida a DLL, ou não if (key == "3216576513268432") // exemplo de chave valida { // ja que a chave é valida, vc deve alterar o valor da valorParametroExpiracao no lugar que vc gravou (arquivo txt, registro ou banco de dados) //Como Altero o valorParametroExpiracao(já que no caso ele teria que sêr um valor data infinito caso a chave fosse válida) teria um video auto explicativo como fz td esse processo tanto do componente //como da WebApp em que meu componente com chave trial será utilizado return (true); } else { // exibe uma mensagem falando que a chave está errada HttpContext.Current.Response.Write("Chave Inválida - Por Favor entre com outra chave"); // vc tb pode contar o nº de tentativas e bloquear depois de algumas tentativas erradas. return (false); } } static void MetodoDaSuaDll()//Onde está MetodoDaSuaDll() substituo por meuMetodo(string dado, Label IDLabel, bool verdadeirooufalse), et....ou seja o metodo de minha aplicação { // aqui faz todo o processo que o DLL é responsavel string testachave = string.Empty; if (HttpContext.Current != null) { testachave = HttpContext.Current.Request.UserHostAddress; HttpContext.Current.Response.Write(testachave+meudado); }   } public void DllExpirada() { // Informe aqui ao usuário que a data da expiração da DLL foi excedida // e ele deve adquirir a licença agora e depois vc abandona a DLL sem executar o metodos dela HttpContext.Current.Response.Write("Sua Dll foi expirada por favor adquira a licença"); } //E como eu faria neste Aquele metodo de quando faltar determinados dias para a minha webapp expirar //Aparecer uma msg onde faltam X dias para sua DLL expirar por favor adquira ou renove a licença //pelo site.... protected string DiasRestantes() { string dataExpiracao = valorParametroExpiracao; // desta forma começa a contagem somente no mesmo ano que vai expirar a DLL if (DateTime.Now.Year == Convert.ToDateTime(dataExpiracao).Year) { // verifica se o mês é o mesmo if (DateTime.Now.Month == Convert.ToDateTime(dataExpiracao).Month) { int diasRestantes = DateTime.Now.Day - Convert.ToDateTime(dataExpiracao).Day; if (DateTime.Now.Day < Convert.ToDateTime(dataExpiracao).Day || (DateTime.Now.Day == Convert.ToDateTime(dataExpiracao).Month && DateTime.Now.Day < Convert.ToDateTime(dataExpiracao).Day)) resultadodias = (Math.Abs(diasRestantes)).ToString(); return resultadodias; } } return resultadodias; } } }   A duvida se baseia em como têr uma solução para isto em relação ao servidor que vai receber o componente pois não saberei se ele interpretará a data de expiração como valorReferencia = "24/2/2009"; valorParametroExpiracao = "28/2/2009"; valorParametroAvisoExpiracao = "28/2/2009";   ou   valorReferencia = "24/02/2009"; valorParametroExpiracao = "28/02/2009"; valorParametroAvisoExpiracao = "28/02/2009";   Teria alguma sugestão na minha classe como seria possivel corrigir essa situação caso o servidor onde estará hospedado tal componente por exemplo interpretar a data como DD/M/AAAA no lugar de DD/MM/AAAA e vice e versa, já que o valor inserido principalmente se fôr cryptografado ele sempre virá fixo   Fico no aguardo e desde já agradeço
GOSTEI 0
Luiz Maia

Luiz Maia

19/02/2009

Olá Luiz, Para corrigir o problema das datas vc deve fazer uso do Globalization ou Culture, que são umas tags que vc coloca no arquivo de configuração (web.config ou app.config) njo qual vc consegue definir suas opções de cultura, como formatos de datas e moedas por exemplo, vc tb consegue fazer estas configurações direto na sua classe, abaixo, segue os dois exemplos.   ARQUIVO CONFIGURATION: <system.web> <!-- GLOBALIZATION This section sets the globalization settings of the application. --> <globalization requestEncoding="utf-8" responseEncoding="utf-8" uiCulture="pt-BR" culture="pt-BR" /> </system.web>   VIA SOURCE:   System.Globalization.CultureInfo ptBRCulture = new System.Globalization.CultureInfo("pt-BR");   Abraços Luiz Att Luiz Maia
GOSTEI 0
Luiz Franco

Luiz Franco

19/02/2009

Ok mas como é uma ClassLibrary como colocaria os mesmos métodos de formatação de cultura e globalização citados para serem colocados no web.config que fosse reconhecida na class library?   Fico no aguardo e desde já agradeço
GOSTEI 0
Luiz Maia

Luiz Maia

19/02/2009

É so usar o exemplo via source.   Abraços Luiz Maia  
GOSTEI 0
Luiz Franco

Luiz Franco

19/02/2009

Olá LUIZ, acho que eu não soube me expressar como faço no caso do jeito que está o meu método e a dúvida que lhe reportei para que por exemplo ele reconheça uma formatação única de datas para não dar diferença   por exemplo se for criada a data de expiração que seja formatada para DD/MM/aaaa na hora que a pessoa se cadastrar em meu site que no meu método na hora que ele receber os valores naquelas variaveis que ele mesmo recebendo os valores   valorReferencia = "24/2/2009"; valorParametroExpiracao = "28/2/2009"; // Aqui vc pega o valor de expiração, seja do arquivo, de registro ou de banco de dados //Dados para valor de Dias que faltam a expirar string valorParametroAvisoExpiracao = "28/2/2009";//Aqui vc pega o valor de aviso para expiração que ele tenha em suas variaveis ou algo assim algo pra formatá-lo e só reconhecer como DD/MM/aaaa   A minha duvida seria neste caso tem como ou isso vai interferir na hora que convertê-lo de string para datatime   como abaixo   Convert.ToDateTime(valorParametroAvisoExpiracao); if (DateTime.Now > Convert.ToDateTime(valorReferencia)) { diasaviso = DiasRestantes(); } e     if(Convert.ToDateTime(valorParametroExpiracao) > DateTime.Now)   Fico no aguardo e desde já agradeço
GOSTEI 0
Luiz Maia

Luiz Maia

19/02/2009

Ola Luiz,   Quando vc define:     System.Globalization.CultureInfo ptBRCulture = new System.Globalization.CultureInfo("pt-BR");   Vc assume que as datas do servidor virão no formatado brasileiro (dd/mm/yyyy). E para que vc padronize suas outras data, vc pode usar:   string teste = Convert.DateTime(data).ToString("dd/MM/yyyy");   Abraços Att Luiz Maia
GOSTEI 0
Luiz Maia

Luiz Maia

19/02/2009

E ai Luiz,   Conseguiu finalizar a DLL trial?   Abraços e aguardo sua resposta.   Att Luiz Maia
GOSTEI 0
Luiz Maia

Luiz Maia

19/02/2009

Ola Luiz,   Estamos procedendo com o fechamento do chamado, pois não obtvemos resposta. Continuamos a sua disposição. Abraços Luiz Maia
GOSTEI 0
POSTAR