Сравнение дат в C # - PullRequest
       4

Сравнение дат в C #

1 голос
/ 15 декабря 2011

В настоящее время я работаю над небольшим проектом, и я застрял с небольшой проблемой. Я хотел бы, чтобы моя программа вызывала метод CheckDate при загрузке. Этот метод будет читать в файле .txt , чтобы увидеть последнюю сохраненную дату в формате (гггг / мм / дд) . Затем он сравнил бы его с сегодняшней датой, и если это не то же самое, продолжайте с некоторыми инструкциями. Я прочитал документ здесь , но не могу найти, какой метод лучше всего подходит для моих нужд.

Вопрос 1: Есть ли способ получить сегодняшнюю дату в формате (гггг / мм / дд) ?

Вопрос 2: Какой самый простой способ сравнить даты в C #?

Заранее спасибо.

Ответы [ 8 ]

7 голосов
/ 15 декабря 2011
1. DateTime.Now.ToString("yyyy/MM/dd")
2. DateTime.Parse(input).Date == DateTime.Now.Date
3 голосов
/ 15 декабря 2011

Вы можете получить сегодняшнюю дату в виде строки, просто отформатировав дату.

String today = String.Format("{0: yyyy/MM/dd}", DateTime.Now); 
String today = DateTime.Now.ToString("yyyy/MM/dd");

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

if (строка a == строка b)

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

if (DateTime.Now.ToString("yyyy/MM/dd").Equals("date pulled from txt file"))
1 голос
/ 15 декабря 2011

Буквой вопроса:

1:

DateTime.Now.ToString(@"yyyy\/MM\/dd") 

2:

if(d1 < d2)...
if(d2 >= d1)...

и т. Д.

Однако.

DateTime dt;
if(DateTime.TryParseExact(readInString, "yyyy-MM-dd", null, DateTimeStyles.AssumeLocal, out dt))
{
  if(dt != DateTime.Now.Date)
  {
    //Code for case where it's no longer that day goes here.
  }
}
else
{
  //Code for someone messed up the file and it's not a valid date any more goes here.
}
  1. Вы делаете это для чтения на компьютере, а не для чтения человеком, поэтому используйте стандартный формат, а не обычный формат (стандартный, как в ISO, но также в каждой стране, кроме СевернойКорея имеет его в качестве национального стандарта): yyyy-MM-dd (Edit: я вижу, что вы находитесь в Канаде, CSA Z234.5: 1989 является соответствующим национальным стандартом даты и времени для технических целей; в нем говорится об использовании yyyy-ММ-дд).

  2. Вы должны сделать это наоборот, прочитать строку, разобрать дату и сделать сравнение.

1 голос
/ 15 декабря 2011

Какой самый простой способ сравнить даты в C #?

Хранить их не как текст, а в DatteTime.

Сравнить переменные.

Если в обоих случаях есть время, сравните a.Date == b.Date.

Есть ли способ получить текущую дату в формате (гггг / мм / дд)?

Да.Это неправильно, хотя.PARSE Неправильный ввод и сравнение проанализированных данных.

0 голосов
/ 15 декабря 2011
DateTime d1 = DateTime.Now;
DateTime d2 = d1.AddMilliseconds(123456789);
string formattedDate = d1.ToString("yyyy/MM/dd");

TimeSpan ts = d2 - d1;

double dayDiff = ts.TotalDays;
double hourDiff = ts.TotalHours;
double minuteDiff = ts.TotalMinutes;
double secondDiff = ts.TotalSeconds;
double milDiff = ts.TotalMilliseconds;

Console.WriteLine("Formatted Date: {0}\r\nDate Diff:\r\nTotal Days: {1}; Total Hours: {2}; Total Minutes: {3}; Total Seconds: {4}; Total Milliseconds: {5}", formattedDate,dayDiff,hourDiff,minuteDiff,secondDiff,milDiff);

Выход:

Дата в формате: 2011/12/15

Разница в дате:
Всего дней: 1.42889802083333; Общее количество часов: 34.2935525; Всего минут: 2057.61315; Всего секунд: 123456.789; Всего миллисекунд: 123456789

* Отредактировал мой первоначальный пост, чтобы уточнить, как работают свойства "Всего".

0 голосов
/ 15 декабря 2011

// использовать TimeSpan, сделать что-то вроде этого

  strCurDate = string.Format(DateTime.Now.ToString(), "yyyy/mm/dd");
  FileInfo fiUpdateFileFile = null;
  fiUpdateFileFile = new FileInfo(YourFile Location + Your FileName);
  if (((TimeSpan)(DateTime.Now - fiUpdateFileFile.LastWriteTime)).TotalHours < 24)
  {  
    // do your logic here...
  }
// you could also get at DateTime.Now.Date() or Day.. depending on what you want to do
0 голосов
/ 15 декабря 2011

вы можете захотеть взглянуть на FileInfo-Class ... вы можете сравнить элемент LastWriteTime с DateTime.Today

0 голосов
/ 15 декабря 2011

Существует метод DateTime.Compare, который вы можете использовать http://msdn.microsoft.com/en-us/library/system.datetime.compare.aspx - это также должно позволить вам использовать встроенные операторы <и>.

...