我正在寻找一个关于如何在一行内获得所有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");
}
}
}
}
答案 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.Parse
或TryParse
/ 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
}
}