it-swarm.com.ru

Как удалить временную часть даты в C # только в объекте DateTime?

Мне нужно удалить часть времени даты времени или, возможно, дату в следующем формате в форме object, а не в форме string.

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

Я не могу использовать методы преобразования string, так как мне нужна дата в форме object.

Сначала я попытался преобразовать DateTime в string, удалить из него указанную дату, но он добавляет 12:00:00 AM, как только я снова преобразовал его в DateTimeobject.

366
im useless

Используйте свойство Date :

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

Переменная date будет содержать дату, часть времени будет 00:00:00.

692
driis

Вы можете использовать строки формата, чтобы придать выходной строке нужный вам формат. 

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

Читать дальше здесь .

127
0x49D1

Используйте метод ToShortDateString. См. Документацию 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

Посмотрите на свойство DateTime.Date .

Получает компонент даты этого экземпляра.

37
Nick

Свойство Date вернет дату в полночь.

Одним из вариантов может быть получение отдельных значений (день/месяц/год) отдельно и сохранение их в нужном вам типе.

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

Ни один из приведенных выше ответов не решил мою проблему с winforms.

самый простой способ достичьТОЛЬКОdate - это простая функция в Datetime:

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

У вас будет только дата в строке именинника.

16
MehraD

Попробуйте сделать свою собственную структуру для этого. DateTime объект будет иметь дату и время

14
Umesh CHILAKA

Ты не можешь У DateTime в .NET всегда есть время, по умолчанию 00: 00: 00: 000. Свойство Date DateTime также является DateTime (!), Поэтому время по умолчанию также равно 00: 00: 00: 000.

Это недостаток .NET Framework, и можно утверждать, что DateTime в .NET нарушает принцип единой ответственности

12
Tomas Vinter
11
VikciaR

Вот другой метод с использованием 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);

Результат:

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

Date Only : 04/09/2016

Это также работает, если Дата Время хранится в базе данных.

Для получения дополнительной даты и времени форматирования проверьте эти ссылки:

Ссылка 1

Ссылка 2

Надежда помогает.

8
stom

Этот способ получить только дату без времени

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

Выходные данные = 16.05.2015

7
Mayank Gupta

Я написал DateOnly структуру. Это использует DateTime под кожей, но никакие части времени не выставляются публично:

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);
    }
}

Это конвертировано из VB.NET, поэтому извиняюсь, если некоторые конверсии не на 100%

5
Matt Wilko

Я удивлен, что никто не упомянул DateTime.Today

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

Смотрите MSDN

4
LukeF

Используйте date.ToShortDateString (), чтобы получить дату без компонента времени

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

используйте date.ToString (), чтобы настроить формат даты

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

Наткнулся на этот пост при попытке решить оригинальную Q.

Я использую Asp.Net и после некоторого исследования, которое я обнаружил, когда вы привязываете значение даты в коде позади, вы можете отбросить время, чтобы оно не отображалось на экране.

C #:

DateTime Today = DateTime.Now;

aSPX:

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

использование 

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

Если вы конвертируете его в строку, вы можете легко сделать это следующим образом.

Я принимаю дату как ваш объект DateTime.

date.ToString("d");

Это даст вам только дату.

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

Если вы берете дату из календаря, с этим мы также получаем время. Что не требуется все время. Используя это мы можем удалить время от даты.

2
hizbul25

Я знаю, что это старый пост с множеством ответов, но я не видел этот способ удаления части времени. Предположим, у вас есть переменная DateTime, называемая myDate, с датой и временем. Вы можете создать новый объект DateTime из него без временной части, используя этот конструктор:

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

Как это:

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

Таким образом, вы создаете новый объект DateTime на основе старого, с 00:00:00 в качестве временной части.

2
Guillermo Gutiérrez

по моему опыту ни одно из упомянутых решений не сработало, возможно, потому что я хотел удалить время из извлеченной даты из базы данных, но код ниже работал нормально:

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

Объявите переменную как строку.

пример :

public string dateOfBirth ;

затем назначьте значение как: 

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

Вы можете попробовать это только для даты с даты 

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

Где dt DateTime

2
Vikas

Создайте структуру, которая содержит только те свойства, которые вы хотите. Затем метод расширения, чтобы легко получить эту структуру из экземпляра 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
        };
    }
}

Использование

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

Для использования списком данных, репитер .. на странице aspx: <% # Eval ("YourDateString"). ToString (). Remove (10)%>

1
Filip Dialm

Использование .Date объекта DateTime будет игнорировать часть времени.

Вот код:

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();

Результат:

>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

Получение части Date объекта DateTime не сработало для меня, потому что я работаю на стороне клиента, а возвращенные значения веб-службы имеют некоторые даты null. В результате он пытается получить часть Date с нулевым значением и выдает исключение времени выполнения. В следующем примере показано, как я решил свою проблему:

string dt = employer.BirthDay.ToString();
if(dt == ""){ dt = "N/A";}
else dt = dt.Substring(0,10);
  1. Получить значение DateTime в виде строки в строковую переменную. 
  2. Проверьте, если это нуль. Если ноль, присвойте строковую переменную.
  3. Если не ноль, получите первые 10 символов строкового значения DateTime и присвойте его строковой переменной.

Я делюсь этим для дальнейшего использования.

1
apollo

Используйте немного RegEx:

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

Производит дату в формате: дд/мм/гггг

1
DividedByZero

Это можно сделать просто так:

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

Этот код дает вам четкое представление о написании Date, а также Time отдельно

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);

Надеюсь это поможет.

1
Zero

В случае, если вы хотите использовать Binding и показывать только часть даты без времени

ToolTip = "{Связывающая модель транзакции. Дата транзакции, формат строки = d}"

0
Kovalenko Ihor

Попробуйте это, если вы используете DateTimeOffset, он также позаботится о часовом поясе

date1 = date1.LocalDateTime.Date;

Если вам нужно добавить часы, используйте это:

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

Я думаю, что вы бы это: DateTime onlyDate = DateTime.Today.Date; Или, это то же самое DateTime onlyDate = yourDateTime.Date; Так что используйте свойство Date.

0
Carmine Checker

Если вы хотите удалить часть времени из DateTime, попробуйте использовать этот код:

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

вывод: 01:01:01

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

Просто используйте одну строку кода:

var dateAndTime = DateTime.Now.Date;
0
NinjaCoder

Чтобы получить только часть даты, используйте метод ToString (),

пример: DateTime.Now.Date.ToString ("дд/мм/гггг")

Примечание: мм в формате дд/мм/гггг должен быть заглавным

0
nate.py