2012-08-14 99 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)