Como posso alterar apenas o tempo na minha DateTime
variável "s"?
DateTime s = some datetime;
Você não pode alterar um valor DateTime - é imutável. No entanto, você pode alterar a variável para ter um novo valor. A maneira mais fácil de fazer isso para alterar apenas a hora é criar um TimeSpan com a hora relevante e usar a propriedade DateTime.Date:
DateTime s = ...;
TimeSpan ts = new TimeSpan(10, 30, 0);
s = s.Date + ts;
s
agora será a mesma data, mas às 10h30.
Observe que DateTime
desconsidera as transições de horário de verão, representando o horário gregoriano "ingênuo" nas duas direções (consulte a seção Observações na DateTime
documentação ). As únicas exceções são .Now
e .Today
: eles recuperam a hora atual do sistema, que reflete esses eventos à medida que ocorrem.
Esse é o tipo de coisa que me motivou a iniciar o projeto Noda Time , que agora está pronto para produção. Seu ZonedDateTime
tipo é "ciente" vinculando-o a uma tz
entrada do banco de dados .
Add
fornecer um período de tempo zero? Sua expressão é equivalente as.Date
, mas mais tempo ...DateTime
s, (um para a data e uma para o tempo) você pode fazer isso:var result = date.Date + time.TimeOfDay;
time
não deve ser umDateTime
. (Eu usaria Noda Tempo é claro, mas ...)Tudo bem, eu estou mergulhando com a minha sugestão, um método de extensão:
Então ligue:
É importante observar que essa extensão retorna um novo objeto de data, portanto você não pode fazer isso:
Mas você pode fazer isso:
fonte
Datetime.Today.Add(time.TimeOfDay)
. Isso ocorre porque internamente, o construtor não faz nenhuma correção baseada em calendário, exceto contabilizando um ano bissexto para a parte da data. Ou seja,DateTime
é uma implementação "ingênua" em termos dedatetime
módulo do Python .Dessa forma, você preserva sua data, enquanto insere novas horas, minutos e segundos, ao seu gosto.
fonte
.AddMilliseconds()
se necessário.um forro
traria de volta a data de hoje com um horário de 4:30:00, substitua DateTime.Now por qualquer objeto de data
fonte
DateTime é um tipo imutável, então você não pode mudar lo.
No entanto, você pode criar uma nova instância DateTime com base na sua instância anterior. No seu caso, parece que você precisa da propriedade Date e pode adicionar um TimeSpan que representa a hora do dia.
Algo assim:
fonte
Se você já possui o tempo armazenado em outro
DateTime
objeto, pode usar oAdd
métodoA
TimeOfDay
propriedade é umTimeSpan
objeto e pode ser passada para oAdd
método E como usamos aDate
propriedade dadateToUse
variável, obtemos apenas a data e adicionamos o intervalo de tempo.fonte
Solução mais simples:
E se você precisar de um formato específico de data e hora:
fonte
Executado: Hoje = 9/04/15 00:00:00
fonte
Aconteceu neste post como eu estava procurando a mesma funcionalidade que isso poderia fazer o que o cara queria. Pegue a data original e substitua a parte do tempo
fonte
Como
DateTime
é imutável, uma nova instância deve ser criada quando um componente de data precisar ser alterado. Infelizmente, não há funcionalidade incorporada para definir componentes individuais de umDateTime
instância.Usando os seguintes métodos de extensão
você pode definir
DateTime
componentes individuais comofonte
Se você tem um DateTime como 2014/02/05 18:19:51 e deseja apenas 2014/02/05, pode fazer isso:
fonte
A adição de .Date à sua data define como meia-noite (00:00).
Nota O SQL equivalente é
CONVERT(DATETIME, CONVERT(DATE, @MyDate))
O que torna esse método tão bom é que ele é rápido de digitar e fácil de ler. Um bônus é que não há conversão de strings.
Ou seja, para definir a data de hoje como 23:30, use:
É claro que você pode substituir DateTime.Now ou MyDate por qualquer data de sua escolha.
fonte
Na verdade, você não pode alterar a hora depois de criada. Mas você pode criá-lo facilmente com muitos construtores: https://docs.microsoft.com/en-us/dotnet/api/system.datetime.-ctor?view=netframework-4.7.2
Por exemplo, se você deseja criar um DateTime alterando segundos, basta fazer o seguinte:
fonte
fonte
Use
Date.Add
e adicione aNew TimeSpan
com a nova hora que você deseja adicionarfonte
Ao construir seu
DateTime
objeto, use um construtor que permita especificar o tempo:Se você já possui um
DateTime
objeto e deseja alterar a hora, pode adicionar minutos, horas ou segundos ao seuDateTime
uso de métodos simples:Observe como precisamos "salvar" o resultado de cada chamada de método para a
myDateTime
variável. Isso ocorre porqueDateTime
é imutável e seus métodos simplesmente criam novas instâncias com as horas / minutos / segundos extras adicionados.Se você precisar adicionar horas e minutos (e / ou segundos) e o mesmo horário, poderá simplificar o código adicionando um
TimeSpan
ao originalDateTime
:Se você deseja definir horas / minutos / segundos absolutos, em vez de adicionar aos valores existentes, pode usar o
DateTime
construtor mencionado acima e reutilizar valores para o ano / mês / dia anteriores:fonte
Aqui está um método que você pode usar para fazer isso por você, use-o assim
Aqui está o método, provavelmente existe uma maneira melhor, mas acabei de preparar isso:
fonte
Acabei de encontrar este post porque tive um problema semelhante no qual queria definir o horário para um objeto do Entity Framework no MVC que obtém a data de uma exibição (datepicker), portanto o componente de horário é 00:00:00, mas preciso é a hora atual. Com base nas respostas deste post, eu vim com:
fonte
fonte
Você pode atribuir um valor inicial a um novo
DateTime
valor de várias maneiras diferentes:Método de extensão
DateTime
então usando
ChangeTime
:usando os métodos Add
usando o Timespan
usando valor inicial
fonte
O que há de errado com o método DateTime.AddSeconds, no qual você pode adicionar ou subtrair segundos?
fonte
você pode adicionar valores + ve / -ve no parâmetro
fonte
Isso não resolve seus problemas?
fonte
Eu prefiro isso:
fonte
Use assim:
Console.WriteLine (DateTime.Now.ClearTimeFrom (eTimeFragment.hours))
isso deve retornar: 2016-06-06 00: 00: 00.000
fonte
A melhor solução é:
fonte
Tente este
fonte
aqui é uma maneira do gueto, mas funciona :)
fonte
dt.AddSeconds(0-dt.Seconds).AddSeconds(newSecondsValue)
mas não recomendaria.