2012-08-14 4 views
0

Хорошо, поэтому у меня есть следующий код, чтобы захватить последние 4 символа в имени папки, которая всегда будет датой, отформатированной как MMDD. Эта дата всегда будет и в понедельник.Рассчитать каждый день недели

Имя папки Пример быть обрезаны ниже: C: \ Temp \ TextFiles \ 20120813

Dim MMDD_Date As String = Microsoft.VisualBasic.Right(TextBox1_Path.Text, 4) 

Что я неуверен, как вычислить оставшиеся дни на этой неделе, заканчивающийся в пятницу. Obvioulsy вы не можете преобразовать строку в int и добавить 1, так как некоторые месяцы имеют 29, 30 или 31 в зависимости от високосных годов.

Конечный результат будет что-то вроде этого:

пн: 0813

Вт: 0814

ср: 0815

чт: 0816

Пт: 0817

Любые предложения указать мне в правильном направлении?

+0

У вас есть компонент «год» (ГГГГ)? – Channs

+0

Да, компонент года является частью имени папки. Пример имени папки: C: \ Temp \ Textfiles \ 20120813 – Muhnamana

+0

Это ваш случай? Пожалуйста, помогите мне понять. Если имя папки заканчивается на «0814» (Tue), вам нужен список строк от «0814» (Tue) до «0817» (Fri). Если имя папки заканчивается на '0817' (Fri), вы хотите именно это. Если имя папки - Sat или Sun, то это no-op. – Channs

ответ

1

Похоже, вы хотите что-то вроде этого. Я не совсем уверен. Это в C#, я предполагаю, что вы можете преобразовать его в VB.NET.

var folderName = @"C:\Temp\Textfiles\20120813"; //Test input 
var dateString = folderName.Substring(folderName.Length - 8); 
var date = DateTime.ParseExact(dateString, "yyyyMMdd", CultureInfo.InvariantCulture); 

var counter = date.DayOfWeek; //OP says this is always a Monday, but is not hardcoded 
var mmdd = int.Parse(folderName.Substring(folderName.Length - 4)); 
var myDates = new List<string>(); 

do 
{ 
    myDates.Add(string.Format("{0}: {1:0000}", counter.ToString().Substring(0, 3), mmdd++)); //E.g. "Mon: 0813" 
} while (counter++ < DayOfWeek.Friday); 
+0

Да, я попробую, но не знаком с C#. Благодарю. – Muhnamana

+0

Я думаю, что понял. Взяли какой-то код и другие плакаты и комбинировали? Ну, похоже, это сработало. – Muhnamana

+0

Рад, что это сработало для вас. Ура! – Channs

1

Создать DateTime, используя год, месяц и день. Используйте эту созданную дату, чтобы легко получить последующие дни.

' Parse Y, M and D (Integers) from folder name 
    ' ... 

    Dim X As DateTime 
    X = New DateTime(Y, M, D) 

    Dim Tue As String = X.AddDays(1).ToString("MMDD") 
    Dim Wen As String = X.AddDays(2).ToString("MMDD") 
    Dim Thr As String = X.AddDays(3).ToString("MMDD") 
    Dim Fri As String = X.AddDays(4).ToString("MMDD") 
0

Хорошо, хорошо, вот что я придумал. Принимал предложения от @channs и @Dusan и объединил усилия.

Dim FolderDate As String = TextBox1_Path.Text 
    Dim DateString = FolderDate.Substring(FolderDate.Length - 8) 
    Dim d = DateTime.ParseExact(DateString, "yyyyMMdd", CultureInfo.InvariantCulture) 

    Dim Mon As String = d.ToString("MMdd") 
    Dim Tue As String = d.AddDays(1).ToString("MMdd") 
    Dim Wed As String = d.AddDays(2).ToString("MMdd") 
    Dim Thu As String = d.AddDays(3).ToString("MMdd") 
    Dim Fri As String = d.AddDays(4).ToString("MMdd") 

    'test output 
    MsgBox(Mon) 
    MsgBox(Tue) 
    MsgBox(Wed) 
    MsgBox(Thu) 
    MsgBox(Fri) 
Смежные вопросы