2012-08-14 104 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

您是否有「年」(YYYY)組件? – Channs 2012-08-14 13:36:36

+0

是的,年份組件是文件夾名稱的一部分。文件夾名稱示例:C:\ Temp \ Textfiles \ 20120813 – Muhnamana 2012-08-14 13:42:41

+0

這是您的情況嗎?請幫助我理解。如果文件夾名以'0814'(星期二)結尾,則需要從'0814'(星期二)到'0817'(星期五)的字符串列表。如果文件夾名稱以'0817'(星期五)結尾,那麼您需要這樣做。如果文件夾名稱是星期六或太陽,則它是無操作的。 – Channs 2012-08-14 14:14:10

回答

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 2012-08-14 16:20:31

+0

我想我明白了。拿走了你的一些代碼和其他海報代碼和組合?好吧,它似乎工作。 – Muhnamana 2012-08-14 16:38:26

+0

很高興爲你效勞。乾杯! – Channs 2012-08-14 16:48:02

1

使用年,月,日創建日期時間。使用該創建日期可以輕鬆獲得後續日子。

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