web-dev-qa-db-fra.com

Comment supprimer la partie heure de la date en C # uniquement dans l'objet DateTime?

Je dois supprimer la partie heure de la date heure ou avoir probablement la date au format suivant sous la forme object et non sous la forme string.

06/26/2009 00:00:00:000

Je ne peux utiliser aucune méthode de conversion string car j'ai besoin de la date sous la forme object.

J'ai d'abord essayé de convertir DateTime en string, d'en supprimer la date spécifique, mais il ajoute 12:00:00 AM dès que je le reconvertis en DateTimeobject.

366
im useless

Utilisez le Date property:

var dateAndTime = DateTime.Now;
var date = dateAndTime.Date;

La variable date contiendra la date, la partie heure sera 00:00:00.

692
driis

Vous pouvez utiliser des chaînes de format pour donner à la chaîne de sortie le format de votre choix. 

DateTime dateAndTime = DateTime.Now;
Console.WriteLine(dateAndTime.ToString("dd/MM/yyyy")); // Will give you smth like 25/05/2011

Lire plus ici .

127
0x49D1

Utilisez la méthode ToShortDateString. Voir la documentation http://msdn.Microsoft.com/en-us/library/system.datetime.toshortdatestring.aspx

var dateTimeNow = DateTime.Now; // Return 00/00/0000 00:00:00
var dateOnlyString = dateTimeNow.ToShortDateString(); //Return 00/00/0000
90
Adriano Silva

Consultez la propriété DateTime.Date .

Obtient le composant de date de cette instance.

37
Nick

La propriété Date renverra la date à minuit.

Une option consiste à obtenir les valeurs individuelles (jour/mois/année) séparément et à les stocker dans le type souhaité.

var dateAndTime = DateTime.Now; 
int year = dateAndTime.Year;
int month = dateAndTime.Month;
int day = dateAndTime.Day;

string.Format("{0}/{1}/{2}", month, day, year);
25
sidprasher

Aucune des réponses ci-dessus n'a résolu mon problème sur winforms.

le moyen le plus simple d'atteindreUNIQUEMENTdate est la fonction simple de Datetime:

DateTime dt = DateTime.now;
String BirthDate = dt.ToShortDateString();

Vous aurez seulement la date dans la chaîne d'anniversaire.

16
MehraD

Essayez de créer votre propre structure pour cela. Objet DateTime aura la date et l'heure à la fois

14
Umesh CHILAKA

Tu ne peux pas. Un DateTime dans .NET a toujours une heure, définie par défaut sur 00: 00: 00: 000. La propriété Date d'un DateTime est également un DateTime (!), Par conséquent, l'heure par défaut est 00: 00: 00: 000.

Il s’agit d’une pénurie dans le .NET Framework et on pourrait faire valoir que DateTime dans .NET enfreint le principe de responsabilité unique

12
Tomas Vinter
11
VikciaR

Voici une autre méthode en utilisant String.Format

    DateTime todaysDate = DateTime.UtcNow;

    string dateString = String.Format("{0:dd/MM/yyyy}", todaysDate);

    Console.WriteLine("Date with Time: "+ todaysDate.ToString());

    Console.WriteLine("Date Only : " + dateString);

Sortie:

Date with Time: 9/4/2016 11:42:16 AM

Date Only : 04/09/2016

Cela fonctionne également si Date Time est stocké dans la base de données.

Pour plus de formatage Date et Heure, vérifiez ces liens:

Référence 1

Référence 2

L'espoir aide.

8
stom

Cette façon de ne recevoir que la date sans heure

DateTime date = DateTime.Now;
string Strdateonly = date.ToString("d");

Sortie = 5/16/2015

7
Mayank Gupta

J'ai écrit une structure DateOnly. Ceci utilise un DateTime sous la peau mais aucune heure ne sont exposées publiquement:

using System;

public struct DateOnly : IComparable, IFormattable, IComparable<DateOnly>, IEquatable<DateOnly>
{

    private DateTime _dateValue;

    public int CompareTo(object obj)
    {
        if (obj == null)
        {
            return 1;
        }

        DateOnly otherDateOnly = (DateOnly)obj;
        if (otherDateOnly != null)
        {
            return ToDateTime().CompareTo(otherDateOnly.ToDateTime());
        }
        else
        {
            throw new ArgumentException("Object is not a DateOnly");
        }
    }

    int IComparable<DateOnly>.CompareTo(DateOnly other)
    {
        return this.CompareToOfT(other);
    }
    public int CompareToOfT(DateOnly other)
    {
        // If other is not a valid object reference, this instance is greater.
        if (other == new DateOnly())
        {
            return 1;
        }
        return this.ToDateTime().CompareTo(other.ToDateTime());
    }

    bool IEquatable<DateOnly>.Equals(DateOnly other)
    {
        return this.EqualsOfT(other);
    }
    public bool EqualsOfT(DateOnly other)
    {
        if (other == new DateOnly())
        {
            return false;
        }

        if (this.Year == other.Year && this.Month == other.Month && this.Day == other.Day)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    public static DateOnly Now()
    {
        return new DateOnly(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
    }

    public static bool TryParse(string s, ref DateOnly result)
    {
        DateTime dateValue = default(DateTime);
        if (DateTime.TryParse(s, out dateValue))
        {
            result = new DateOnly(dateValue.Year, dateValue.Month, dateValue.Day);
            return true;
        }
        else
        {
            return false;
        }
    }

    public static DateOnly Parse(string s)
    {
        DateTime dateValue = default(DateTime);
        dateValue = DateTime.Parse(s);
        return new DateOnly(dateValue.Year, dateValue.Month, dateValue.Day);
    }

    public static DateOnly ParseExact(string s, string format)
    {
        CultureInfo provider = CultureInfo.InvariantCulture;
        DateTime dateValue = default(DateTime);
        dateValue = DateTime.ParseExact(s, format, provider);
        return new DateOnly(dateValue.Year, dateValue.Month, dateValue.Day);
    }

    public DateOnly(int yearValue, int monthValue, int dayValue) : this()
    {
        Year = yearValue;
        Month = monthValue;
        Day = dayValue;
    }

    public DateOnly AddDays(double value)
    {
        DateTime d = new DateTime(this.Year, this.Month, this.Day);
        d = d.AddDays(value);
        return new DateOnly(d.Year, d.Month, d.Day);
    }

    public DateOnly AddMonths(int months)
    {
        DateTime d = new DateTime(this.Year, this.Month, this.Day);
        d = d.AddMonths(months);
        return new DateOnly(d.Year, d.Month, d.Day);
    }

    public DateOnly AddYears(int years)
    {
        DateTime d = new DateTime(this.Year, this.Month, this.Day);
        d = d.AddYears(years);
        return new DateOnly(d.Year, d.Month, d.Day);
    }

    public DayOfWeek DayOfWeek
    {
        get
        {
            return _dateValue.DayOfWeek;
        }
    }

    public DateTime ToDateTime()
    {
        return _dateValue;
    }

    public int Year
    {
        get
        {
            return _dateValue.Year;
        }
        set
        {
            _dateValue = new DateTime(value, Month, Day);
        }
    }

    public int Month
    {
        get
        {
            return _dateValue.Month;
        }
        set
        {
            _dateValue = new DateTime(Year, value, Day);
        }
    }

    public int Day
    {
        get
        {
            return _dateValue.Day;
        }
        set
        {
            _dateValue = new DateTime(Year, Month, value);
        }
    }

    public static bool operator == (DateOnly aDateOnly1, DateOnly aDateOnly2)
    {
        return (aDateOnly1.ToDateTime() == aDateOnly2.ToDateTime());
    }

    public static bool operator != (DateOnly aDateOnly1, DateOnly aDateOnly2)
    {
        return (aDateOnly1.ToDateTime() != aDateOnly2.ToDateTime());
    }

    public static bool operator > (DateOnly aDateOnly1, DateOnly aDateOnly2)
    {
        return (aDateOnly1.ToDateTime() > aDateOnly2.ToDateTime());
    }

    public static bool operator < (DateOnly aDateOnly1, DateOnly aDateOnly2)
    {
        return (aDateOnly1.ToDateTime() < aDateOnly2.ToDateTime());
    }

    public static bool operator >= (DateOnly aDateOnly1, DateOnly aDateOnly2)
    {
        return (aDateOnly1.ToDateTime() >= aDateOnly2.ToDateTime());
    }

    public static bool operator <= (DateOnly aDateOnly1, DateOnly aDateOnly2)
    {
        return (aDateOnly1.ToDateTime() <= aDateOnly2.ToDateTime());
    }

    public static TimeSpan operator - (DateOnly aDateOnly1, DateOnly aDateOnly2)
    {
        return (aDateOnly1.ToDateTime() - aDateOnly2.ToDateTime());
    }


    public override string ToString()
    {
        return _dateValue.ToShortDateString();
    }

    public string ToString(string format)
    {
        return _dateValue.ToString(format);
    }

    public string ToString(string fmt, IFormatProvider provider)
    {
        return string.Format("{0:" + fmt + "}", _dateValue);
    }

    public string ToShortDateString()
    {
        return _dateValue.ToShortDateString();
    }

    public string ToDbFormat()
    {
        return string.Format("{0:yyyy-MM-dd}", _dateValue);
    }
}

Ceci est converti à partir de VB.NET, donc des excuses si certaines conversions ne sont pas à 100%

5
Matt Wilko

Je suis surpris que personne n'ait mentionné DateTime.Today

var date = DateTime.Today;
// {7/1/2014 12:00:00 AM}

Voir MSDN

4
LukeF

Utilisez date.ToShortDateString () pour obtenir la date sans le composant heure

var date = DateTime.Now
var shortDate = date.ToShortDateString() //will give you 16/01/2019

utilisez date.ToString () pour personnaliser le format de la date

var date = DateTime.Now
var shortDate = date.ToString('dd-MMM-yyyy') //will give you 16-Jan-2019
3
Nathanael Mayne

Je suis tombé sur ce message en essayant de résoudre le Q. original.

J'utilise Asp.Net et après quelques recherches, j'ai trouvé que lorsque vous vous associez à la valeur de la date dans le code, vous pouvez laisser tomber l'heure pour qu'elle ne s'affiche pas à l'écran.

C #:

DateTime Today = DateTime.Now;

aspx:

<%: this.Today.ToShortDateString() %>
3
John

utilisation 

DateTime.Now.ToString("dd-MM-yyyy");
3
James

Si vous le convertissez en chaîne, vous pouvez facilement le faire comme ceci.

Je prends date comme objet DateTime.

date.ToString("d");

Cela vous donnera seulement la date.

2
TAS
string dt = myCalender.SelectedDate.ToString();
string date = dt.Remove(10);
displayDate.Content = date;

Si vous prenez la date du calendrier, nous avons également le temps. Ce qui n'est pas nécessaire tout le temps. En utilisant cela, nous pouvons supprimer l'heure de la date.

2
hizbul25

Je sais que c'est un ancien message avec de nombreuses réponses, mais je n'ai pas vu cette façon de supprimer la partie temps. Supposons que vous ayez une variable DateTime appelée myDate, avec la date avec la partie heure. Vous pouvez créer un nouvel objet DateTime à partir de celui-ci, sans la partie heure, à l'aide de ce constructeur:

public DateTime(int year, int month, int day);

Comme ça:

myDate = new DateTime(myDate.Year, myDate.Month, myDate.Day);

De cette façon, vous créez un nouvel objet DateTime basé sur l'ancien, avec 00:00:00 comme heure.

2

d'après mon expérience, aucune des solutions mentionnées ne fonctionnait, peut-être parce que je voulais supprimer l'heure de la date extraite de la base de données, mais le code ci-dessous fonctionnait parfaitement:

var date = target_date.Value.ToString("dd/MM/yyyy"); 
2
Daniel

Déclarez la variable en tant que chaîne.

exemple :

public string dateOfBirth ;

puis attribuez une valeur comme: 

dateOfBirth = ((DateTime)(datetimevaluefromDB)).ToShortDateString();
2
Saud Khan

Vous pouvez essayer ceci pour la seule date à partir de la date et l'heure 

String.Format("{0:d/M/YYYY}",dt);

Où dt est la DateTime

2
Vikas

Créez une structure qui ne contient que les propriétés souhaitées. Ensuite, une méthode d'extension pour obtenir facilement cette structure à partir d'une instance de DateTime.

public struct DateOnly
{
    public int Day { get; set; }
    public int Month { get; set; }
    public int Year { get; set; }
}

public static class DateOnlyExtensions
{
    public static DateOnly GetDateOnly(this DateTime dt)
    {
        return new DateOnly
        {
            Day = dt.Day,
            Month = dt.Month,
            Year = dt.Year
        };
    }
}

Usage

DateTime dt = DateTime.Now;
DateOnly result = dt.GetDateOnly();
2
mason
static void Main(string[] args)
{
    string dateStrings =  "2014-09-01T03:00:00+00:00" ;

    DateTime convertedDate = DateTime.Parse(dateStrings);
    Console.WriteLine("  {0} ----------------- {1}",

    convertedDate,DateTime.Parse(convertedDate.ToString()).ToString("dd/MM/yyyy"));

    Console.Read();
}
1
ImranNaqvi

Pour utiliser par datalist, repeater .. dans une page aspx: <% # Eval ("YourDateString"). ToString (). Remove (10)%>

1
Filip Dialm

Utiliser .Date d'un objet DateTime ignorera la partie heure.

Voici le code:

DateTime dateA = DateTime.Now;
DateTime dateB = DateTime.Now.AddHours(1).AddMinutes(10).AddSeconds(14);
Console.WriteLine("Date A: {0}",dateA.ToString("o"));
Console.WriteLine("Date B: {0}", dateB.ToString("o"));
Console.WriteLine(String.Format("Comparing objects A==B? {0}", dateA.Equals(dateB)));
Console.WriteLine(String.Format("Comparing ONLY Date property A==B? {0}", dateA.Date.Equals(dateB.Date)));
Console.ReadLine();

Sortie:

>Date A: 2014-09-04T07:53:14.6404013+02:00
>Date B: 2014-09-04T09:03:28.6414014+02:00
>Comparing objects A==B? False
>Comparing ONLY Date property A==B? True
1
Jota

L'obtention de la partie Date d'un objet DateTime n'a pas fonctionné pour moi car je travaille du côté client et les valeurs de service Web renvoyées ont des dates null. En conséquence, il tente d'obtenir la partie Date d'une valeur null et lève une exception d'exécution. L'exemple suivant montre comment j'ai résolu mon problème:

string dt = employer.BirthDay.ToString();
if(dt == ""){ dt = "N/A";}
else dt = dt.Substring(0,10);
  1. Obtenez la valeur DateTime sous forme de chaîne dans une variable chaîne. 
  2. Vérifiez si c'est nul. Si la valeur est null, attribuez une variable de chaîne.
  3. S'il n'est pas nul, obtenez les 10 premiers caractères de la chaîne DateTime valeur et affectez-la à la variable chaîne.

Je partage ceci pour référence future.

1
apollo

Utilisez un peu de RegEx:

Regex.Match(Date.Now.ToString(), @"^.*?(?= )");

Produit une date au format: jj/mm/aaaa

1
DividedByZero

Cela pourrait être fait simplement de cette façon:

var dateOnly = new DateTime(dateTime.Year, dateTime.Month, dateTime.Day)
1
HichemSeeSharp

Ce code vous donne une vision claire de l'écriture de Date ainsi que de Time séparément

string time = DateTime.Now.Hour.ToString("00") + ":" + DateTime.Now.Minute.ToString("00") + ":" + DateTime.Now.Second.ToString("00");
        string date = DateTime.Now.ToString("M-dd-yyyy");
        MessageBox.Show(date + "\n" + time);

J'espère que cela t'aides.

1
Zero

Si vous souhaitez utiliser la liaison et afficher uniquement la portion de date sans heure

ToolTip = "{Transaction de liaison Modèle Date.Transaction, Format de chaîne = d}"

0
Kovalenko Ihor

Essayez ceci, si vous utilisez une DateTimeOffset, le fuseau horaire s’occupera également

date1 = date1.LocalDateTime.Date;

Si vous devez ajouter des heures, utilisez ceci:

date1 = date1.LocalDateTime.Date;
date1 = date1.AddHours(23).AddMinutes(59).AddSeconds(59);
0
iwhp

Je pense que vous le feriez: DateTime onlyDate = DateTime.Today.Date; Ou, c'est la même DateTime onlyDate = yourDateTime.Date; Alors utilisez la propriété Date.

0
Carmine Checker

Si vous souhaitez supprimer une partie de la durée d'une DateTime, essayez d'utiliser ce code:

DateTime dt = new DateTime();

dt = DateTime.Now; //ex: 31/1/2017 6:30:20 PM

TimeSpan remainingTime = new TimeSpan(0, dt.Hour - 5, dt.Minute - 29, dt.Second - 19);
dt=dt.Add(remainingTime);

label1.Text = dt.ToString("HH:mm:ss"); // must be HH not hh

la sortie: 01:01:01

0
Na'il Laith
DateTime dd=DateTiem.Now;
string date=dd.toString("dd/MM/YYYY");
0
James

Utilisez juste une ligne de code:

var dateAndTime = DateTime.Now.Date;
0
NinjaCoder

Pour obtenir uniquement la partie de date, utilisez la méthode ToString (),

exemple: DateTime.Now.Date.ToString ("jj/mm/aaaa")

Remarque: Les mm du format jj/mm/aaaa doivent être en majuscule.

0
nate.py