如何解析一行?

时间:2015-11-13 12:44:41

标签: c# .net visual-studio

我正在寻找一个关于如何在一行内获得所有int Parses的解决方案。在我开始我的计划时,我必须输入日,月和年。这一切都是逐行完成的。我想要一个解决方案或方法,它可以在一行中以“dd / MM / yyyy”格式进行所有解析。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace date
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("please enter date as dd/MM/yyyy");

            int day;
            int month;
            int year;


            day = int.Parse(Console.ReadLine());
            month = int.Parse(Console.ReadLine());
            year = int.Parse(Console.ReadLine());
            Date i = new Date(day, month, year);



            Console.WriteLine("{0}/{1}/{2}", i.day, i.month, i.year);
            Console.ReadLine();
        }

        class Date
        {
            public int month; // 1-12
            public int day; // 1-31 depending on month
            int value = 1;

            public int year
            {
                get;
                private set;
            }


            public Date(int day, int month, int year)
            {
                this.day = day;
                this.month = month;
                this.year = year;
            }

            public int GetYear()
            {
                return year;
            }

            public void SetYear()
            {
                if (value > 1900 && value <= 2020)
                    year = value;
                else
                    throw new ArgumentOutOfRangeException("year", value, "out of bounds");
            }

            private int Month
            {
                get { return month; }
                set
                {
                    if (value > 0 && value <= 12)
                        month = value;
                    else
                        throw new ArgumentOutOfRangeException("Month", value, "Month must be 1-12");
                }
            }

            public int GetDay()
            {
                return day;
            }

            public void SetDay()
            {
                int[] days = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

                if (value > 0 && value <= days[month])
                    day = value;

                else if (month == 2 && value == 29 &&
                    year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))
                    day = value;
                else
                    throw new ArgumentOutOfRangeException("days", value, "day is out of range");
            }

        }

    }

}

3 个答案:

答案 0 :(得分:1)

您可以使用System.out.println("Username: "); String un = EasyIn.getString(); System.out.println("Password: "); String pw = reader.getString(); System.out.println("Repeat Password: "); String pwRepeat = reader.getString(); //and then go on to confirm that the passwords match and store them in the object etc / DateTime.ParseTryParse / DateTime.ParseExact

TryParseExact

使用此格式string line = Console.ReadLine(); DateTime dt; bool validDate = DateTime.TryParseExact(line,"dd/MM/yyyy", DateTimeFormatInfo.InvariantInfo,DateTimeStyles.None, out dt); if(validDate) Console.WriteLine(dt.ToLongDateString()); // now correctly initialized / DateTime.Parse也适用:

DateTime.TryParse

我使用validDate = DateTime.TryParse(line, DateTimeFormatInfo.InvariantInfo, DateTimeStyles.None, out dt); 来阻止使用您的本地日期分隔符而不是DateTimeFormatInfo.InvariantInfo(如果它不同)。

将其解析为/后,创建DateTime实例的过程非常简单:

Date

答案 1 :(得分:0)

您无法将dd/MM/yyyy格式化的字符串解析为int,因为是有效字符串。

您需要先将其解析为DateTime,然后您可以使用它的属性将日期,月份和年份作为数字。

例如;

Console.WriteLine("please enter date as dd/MM/yyyy");
DateTime dt = DateTime.ParseExact(Console.ReadLine(), "dd/MM/yyyy",
                                  CultureInfo.InvariantCulture);

int day = dt.Day;
int month = dt.Month;
int year = dt.Year;

如果输入不是TryParseExact格式,如果您不想抛出异常,则可以使用dd/MM/yyyy

  

我不想使用预设的DateTime类,但我正在使用我的   拥有&#34;日期&#34;类

如果是这样,在解析之后,您可以使用Date构造函数基于此dt值创建Date(int day, int month, int year)类实例;

Date myDt = new Date(dt.Day, dt.Month, dt.Year);

答案 2 :(得分:0)

如果您不想使用DateTime。(尝试)Parse,您可以在Date类中添加带Regex的解析方法:

public static Date ParseFromString(string s)
  {
     //string s = "24/12/2015";
     Regex r = new Regex(@"(\d+)[\/](\d+)[\/](\d+)");
     Match m = r.Match(s);
     if (m.Success)
     {
        return new Date(m.Groups[1], m.Groups[2], m.Groups[3]);
     }
     else
     {
         // throw exception
     }
  }