2016-04-08 44 views
0

Ben txt dosyaları okur ve bir metin bunları görüntüleyen bir pencere formu programı var, çıkış olabilir: Ben 7 yükleme amTarihin bir metin kutusunda nasıl kontrol edilir ve DateTime.Now pencereleriyle nasıl karşılaştırılır?

  • Test w/c 07/03/16 AT 21/04/2016
  • AT 09/05/2016
  • w/c 07/03/2016 AT 17/03/2016 w/c 25/04/2016

metin dosyaları içine, bazıları 1, 2 veya 3 tarih içerir.

Bu tarihleri ​​nasıl algılayabilir ve algılanan tarihlerin DateTime.Now? Dan önce mi yoksa sonra mı çıktısını alabilir miyim?

Kodum:

string[] ModuleGeneral = new string[5]; 
int i = 0; 
foreach (string line in File.ReadAllLines(Modules[ModuleNum])) 
{ 
     if (line != "") { 
     string[] parts = line.Split(':'); 
     foreach (string part in parts) 
     { 
      switch (parts[0]) { 
       case "ASSIGNMENT": 
         ModuleGeneral[4] = parts[1]; 
         break; 
      } 

private void gameDesign1ToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    MAssignmentsBox.Text = moduleInformation[4]; 
+2

düzenli ifadeler ve: Eğer tarih bir 2 veya 4 haneli yıl kullanabilirsiniz bekleyebilirsiniz, her iki seçeneği girişimi için ayrıştırma dize ayarlayabilirsiniz –

cevap

0

Date.TryParse bir dize ayrıştırır ve dize başarıyla tarihten içine ayrıştırıldı true döndürür. Eğer tarih (belirli bir biçimde, yani "AA/gg/yyyy" olacağını garanti edemez Eğer DateTime.Now

1

daha büyük veya daha küçük ise

Sonra sadece "ayrıştırıldı tarihini kontrol edebilirsiniz vb gg/aA/yy") o zaman bir Regular Expression kullanabilirsiniz (eşleştirmek için Regex.Matches() yoluyla ve daha sonra düzgün (DateTime.TryParseExact() yöntemi kullanılarak beklenen biçimi kullanarak bunları ayrıştırmak Eğer kesin biçimini biliyorum beri):

var input = "w/c 07/03/2016 AT 17/03/2016 w/c 25/04/2016"; 

// Find dates 
var dates = Regex.Matches(input,@"\d{2}\/\d{2}\/\d{2,4}"); 

foreach(Match date in dates) 
{ 
    // Use a placeholder to store your date 
    DateTime d = DateTime.MinValue; 
    if(DateTime.TryParseExact(date.Value,"dd/MM/yyyy",null,DateTimeStyles.None,out d)) 
    { 
      // The date was properly parse, so compare it 
      if(d > DateTime.Now) 
      { 
       // Your date is larger, handle accordingly 
       Console.WriteLine(d + " is greater than today"); 
      } 
      else 
      { 
       // Your date is smaller, handle accordingly 
       Console.WriteLine(d + " is less than today"); 
      } 
     } 
    } 
    else 
    { 
     // Your date was in the wrong format, do something 
    } 
} 

Aşağıdaki çıktıyı veren see an example of this in action here yapabilirsiniz:

3/7/2016 12:00:00 AM is less than today 
3/17/2016 12:00:00 AM is less than today 
4/25/2016 12:00:00 AM is greater than today 

Buradaki sorunlardan biri, hem iki basamaklı hem de dört basamaklı bir yıl kullanmış olmanızdır. Bu nedenle, en iyi şekilde nasıl kullanacağınızı belirlemek istersiniz. `Date.TryParse`

var formats = new ["dd/MM/yyyy","dd/MM/yy"]; 
if(DateTime.TryParseExact(date.Value,formats,null,DateTimeStyles.None,out d)) 
{ 
    // Omitted for brevity 
} 
0
 try 
     { 
     DateTime Date1= DateTime.ParseExact(txtBox1.Text,"dd/MM/yyyy",null); 
     DateTime Date2 = DateTime.ParseExact(txtBox2.Text, "dd/MM/yyyy", null); 

      if (Date1 > Date2) 
      { 
      Your Code... 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     }