Como Corrigir Variação de dias via TimeSpam
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
Curtidas 0
Respostas
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
19/02/2009
Ola Luiz,
Conseguiu usar o metodo que te mandei?
Aguardo seu retorno.
Abraços
Luiz Maia
GOSTEI 0
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
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
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
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
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
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
19/02/2009
É so usar o exemplo via source.
Abraços
Luiz Maia
GOSTEI 0
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
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
19/02/2009
E ai Luiz,
Conseguiu finalizar a DLL trial?
Abraços e aguardo sua resposta.
Att
Luiz Maia
GOSTEI 0
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