DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

Fórum DevMedia


Autor
Mensagem
GEBRAM CORRETORA DE SEGUROS.
 


País: Brasil
Estado: SP
Cidade: jundiai
Mensagens: 20
 Postado em: 10/6/2011 10:30:05 AM
 
Bom dia Pessoal,

Alguém sabe me dizer como passar um parâmetro DateTime em um método consumido por um Web Service ? 

Pois estou tendo um problema que o Web Service só aceita o parâmetro DateTime em formato americano "MM/dd/yyyy" e não em português dd/MM/yyyy e quando tento converter para o formato "MM/dd/yyyy":

string data = "19/05/1987";
string enData = Convert.ToDateTime(data).ToString("MM/dd/yyyy");

quando vou passar como DateTime no parâmetro, como segue abaixo um exemplo que fiz:

DateTime dataDateTime = DateTime.Parse(enData, formatoData);

ao converter e atribuir a data em um DateTime e coloca em formato "dd/MM/yyyy" e não no pretendido que é o "MM/dd/yyyy". 

Abraços
Fabio Rosa
 

 


País: Brasil
Estado: RS
Cidade: Panambi
Mensagens: 69
 Postado em: 10/6/2011 11:17:48 AM
 
Olá!

Para converter a data para o fromato americano, veja um exemplo que fiz abaixo:

        static void Main(string[] args)
        {
            DateTime dtPt = DateTime.Now;
            IFormatProvider en = new CultureInfo("en-US");
            DateTime dtEn = DateTime.ParseExact(dtPt.ToShortDateString(), "MM/dd/yyyy", en);
            Console.WriteLine(dtEn.ToShortDateString());
            Console.ReadKey();
        }     

Veja que criei um novo Formater com auxílio da interface IFormater utilizando a classe CultureInfo setada para a linguagem americana (en-US). Para utilizar a classe CultureInfo, você precisa incluir o namespace "using Globalization;" na sua classe.

Após isto eu fiz a conversão informando a data no formato em português em string, a máscara do formato que quero, e o provider da linguagem americana para entender o meu formato desejado.

Espero que tenha ajudado!

Abraço!
Fabio Rosa
 

 


País: Brasil
Estado: RS
Cidade: Panambi
Mensagens: 69
 Postado em: 10/6/2011 11:20:11 AM
 


Citação:
Olá!



Para converter a data para o fromato americano, veja um exemplo que fiz abaixo:



        static void Main(string[] args)

        {

            DateTime dtPt = DateTime.Now;

            IFormatProvider en = new CultureInfo("en-US");

            DateTime dtEn = DateTime.ParseExact(dtPt.ToShortDateString(), "MM/dd/yyyy", en);

            Console.WriteLine(dtEn.ToShortDateString());

            Console.ReadKey();

        }     



Veja que criei um novo Formater com auxílio da interface IFormater utilizando a classe CultureInfo setada para a linguagem americana (en-US). Para utilizar a classe CultureInfo, você precisa incluir o namespace "using Globalization;" na sua classe.



Após isto eu fiz a conversão informando a data no formato em português em string, a máscara do formato que quero, e o provider da linguagem americana para entender o meu formato desejado.



Espero que tenha ajudado!



Abraço!

 

Ahh, mais uma coisa...veja que utilizei a função ParseExact() e não a função simples Parse().

Vlw.
GEBRAM CORRETORA DE SEGUROS.
 


País: Brasil
Estado: SP
Cidade: jundiai
Mensagens: 20
 Postado em: 10/6/2011 05:08:38 PM
 

  Fabio, Muito obrigado pela ajuda, parabéns, me ajudou.
GEBRAM CORRETORA DE SEGUROS.
 


País: Brasil
Estado: SP
Cidade: jundiai
Mensagens: 20
 Postado em: 11/6/2011 10:06:06 AM
 
Fabio, apesar de eu ter colocado como concluído, comecei a ter problema ao ajustar ao meu código, por que eu recebo a data em string por exemplo:

DateTime dataNascimento = Convert.ToDateTime("19/05/1987").Date;

e não como você tinha colocado no seu código que desta forma realmente não ocorre o erro:

DateTime dataNascimento = DateTime.Now;

por isso, mais que eu converta para DateTime, ocorre um erro nesta linha:

DateTime dataNascimentoEn = DateTime.ParseExact( dataNascimento.ToShortDateString(), "MM/dd/yyyy", en);

o erro diz o seguinte:

Não há suporte para DateTime representado pela seqüência de caracteres no
calendário System.Globalization.GregorianCalendar.

Como será que eu poderia resolver isso ?
Fabio Rosa
 

 


País: Brasil
Estado: RS
Cidade: Panambi
Mensagens: 69
 Postado em: 11/6/2011 06:50:37 PM
 
Olá,

Realmente, não tinha percebido que só funcionava com DateTime.Now...bom...mas abaixo há uma outra solução:

static void Main(string[] args)
        {            
            DateTime dtPt = DateTime.Parse("19/05/1987");

            Console.WriteLine(dtPt.ToString("d"));
            IFormatProvider en = new CultureInfo("en-US");
                        
            Console.WriteLine(dtPt.ToString("d", en));
            Console.ReadKey(); 
        }

Acho que esta será mais fácil. Simplesmente utilize a mesma variável de data, apenas alterando a cultura no método ToString(). 

Antes usamos o ToShortDateString(), porém este não aceita parâmetros, então agora utilizamos o ToString() com dois parâmetros, (ou um), sendo o primeiro "d" o qual informa que queremos uma formatação de data (short date) e o segundo informamos a cultura que desejamos --> en

Veja neste link os dígitos formatadores de data que podemos passar por parâmetro no método ToString()


Espero agora ter resolvido seu problema!!! hehe (Desculpe minha "gafe" anterior...não testei direito)

Qualquer coisa, só falar!

Abraço.
Fabio Rosa
 

 


País: Brasil
Estado: RS
Cidade: Panambi
Mensagens: 69
 Postado em: 12/6/2011 06:17:59 PM
 
Mais um detalhe...

Se precisar passar o parâmetro com o Tipo DateTime, terá que colocar a cultura corrente de sua Thread em inglês, como fiz abaixo..

static void Main(string[] args)
        {            
            DateTime dtPt = DateTime.Parse("19/05/1987");

            Console.WriteLine(dtPt.ToString("d"));
            IFormatProvider en = new CultureInfo("en-US");
                        
            Console.WriteLine(dtPt.ToString("d", en));
            Console.ReadKey();

            Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");

            DateTime dtEn = dtPt;

            Console.WriteLine(dtEn.ToString());
            Console.ReadKey();
        }


Abraço.
GEBRAM CORRETORA DE SEGUROS.
 


País: Brasil
Estado: SP
Cidade: jundiai
Mensagens: 20
 Postado em: 13/6/2011 09:58:06 AM
 
Bom dia Fabio,

Muito Obrigado pela sua ajuda, meus parabéns, demonstro que conhece muito sobre asp.net com c#, resolveu o meu problema.

Abraço
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2013 - Todos os Direitos Reservados a web-03