2015-12-28 2 views
-6

EDITED: (извините, английский не является моим основным языком, и я искренне извиняюсь перед всеми людьми, которые читают этот вопрос.)Как конвертировать день и сравнить это с первым днем ​​месяца?

Я отредактировал мой вопрос, чтобы объяснить свою проблему. Извини за это.

Я хочу сравнить два дня. Когда я добавляю данные к нему и сохраняю день в одном файле time_was_send.txt.

Тогда это должно сравниться с первым днем ​​текущего месяца. Если это правда, то он выполнит метод SendMail.sendDailyMail.

У меня проблемы с методом getfirstdayoflastmonth(), он всегда вычитает 1 месяц, пока я хочу, чтобы он занял первый день текущего месяца.

Я просто хочу сравнить, если они будут в тот же день и месяц или нет - год не важен.

Так что я хочу сравнить что-то вроде этого. 26/12 - читать из файла time_was_send.txt vs getfirstdayoflastmonth(currentDay) пока currentDay = 1/12.

Чтобы помочь вам понять, вот мой код,

string path = "C:\\time_was_send.txt"; 
string timeFromFile = ReadFromFile(path); 
DateTime m_timeFromFile = DateTime.ParseExact(timeFromFile, "dd-MM-yyyy", null); 
string s = now.ToString("dd-MM-yyyy"); 
DateTime timeNow = DateTime.ParseExact(s, "dd-MM-yyyy", null); 

if (m_timeFromFile == procedureMethod.getfirstdayoflastmonth(timeNow)) 
{ 
    try 
    { 
     SendMail.sendDailyMail(listXML); 
    } 
    catch{} 
} 

Вот getfirstdayoflastmonth() метод:

public static DateTime getfirstdayoflastmonth(DateTime time) 
{ 
    return new DateTime(time.AddMonths(-1).Year, time.AddMonths(-1).Month, 1); 
} 

Update 1: я решил мою проблему. В заявлении if(), я добавляю .Day и .Month для сравнения. Это работает. Спасибо всем, кто помог мне.

if (m_timeFromFile.Day == procedureMethod.getfirstdayoflastmonth(timeNow).Day && m_timeFromFile.Month == procedureMethod.getfirstdayoflastmonth(timeNow).Month) 
{ 
    try 
    { 
     SendMail.sendDailyMail(listXML); 
    } 
    catch{} 
} 

AddMonths(-1) я редактировал в AddMonths(0).

public static DateTime getfirstdayoflastmonth(DateTime time) 
{ 
    return new DateTime(time.AddMonths(-1).Year, time.AddMonths(0).Month, 1); 
} 
+2

Трудно понять, что вы спрашиваете или в чем проблема. Вам нужен код, который будет отправлять только электронное письмо, когда оно будет в первый день месяца? – pstrjds

+1

Итак, я не единственный, кто ничего не понял! –

+0

Извините, мне был изменен мой вопрос. –

ответ

0

Чтобы получить первый день месяца, вы можете использовать DateTimeclass методов и свойств одна.

DateTime dt = DateTime.Now; //change this to any date you want 
DateTime firstDayOfMonth = dt.AddDays(1-dt.Day); //the trick is here, minus the DatetTime by the current day (of month) + 1, you necessarily get the first day of the month 
DayOfWeek dow = firstDayOfMonth.DayOfWeek; //this is the first day of the month (this month's first day is Tuesday) 

Если вам нужен первый день месяца, используйте firstDayOfMonth. Если вам нужен день недели в день, используйте dow. Если вы хотите сравнить firstDayOfMonth с некоторыми другими DateTime но заинтересованы только в сравнении даты, просто сделать:

firstDayOfMonth.Date == someOtherDays.Date 

И если вам нужно использовать время тоже можно проверить TimeOfDay.

По существу, попробуйте узнать больше о методах и свойствах класса DateTime. Класс действительно удобен в использовании для такой задачи, как ваша!

Edit: сравнивать день и месяц (но не год), используйте DateTime.Day и DateTime.Month свойства

+0

Я использую DateTime.Day, но он не может получитьDay() для сравнения. –

+0

DateTime.Day должен проверить день месяца. Так 21-янв-2013 и 21-фев-2020 вернут тот же результат (то есть 21). Вы не должны этого делать. Вероятно, вам нужен DateTime.Date (см. Пример в ответе). Если вы хотите найти первый день прошлого месяца, вы можете использовать AddMonths (-1) из firstDayOfMonth выше. Затем, только если вам нужно, чтобы найти DayOfWeek (то есть, понедельник, вторник и т. Д.) За последний месяц, вы можете использовать результат и получить его свойство .DayOfWeek. – Ian

+0

Если вам нужен месяц, чтобы быть тем же, и не только день, то вы должны дать два утверждения: if (firstDayOfMonth.Day == otherDateTime.Day && firstDayOfMonth.Month == otherDateTime.Month) {// сделать что-то } – Ian

0
DateTime dateTime = DateTime.Now; 

DateTime firstDayOfMonth = new DateTime(dateTime.Year,dateTime.Month,1); 

if (firstDayOfMonth.DayOfWeek.Equals(dateTime.DayOfWeek)) 

    MessageBox.Show("The day is matching with first day of the month" + dateTime.DayOfWeek); 

Что-то, как это будет помочь вам.

+0

Спасибо. Я обновил свой вопрос. –