用户友好日期输入

时间:2016-02-28 13:22:51

标签: c# date datetime

我必须编写程序,它将向用户询问一些数据,然后将打印一些包含此数据的文本。 下面只是一段代码(有效),还有其他变量。

class Student
{
    static public DateTime birthDay;

    public void GetStudentInformation()
    {
        Console.WriteLine("Enter student's birth date (as mm/dd/yyyy): ");
        birthDay = DateTime.Parse(Console.ReadLine());
    }

    public void PrintStudentData(ref DateTime birthDay)
    {
        Console.WriteLine("Student was born in {0}", birthDay.ToString("d"));
    }
}

class Program
{
    static void Main(string[] args)
    {
        Student newStudent = new Student();
        newStudent.GetStudentInformation();
        newStudent.PrintStudentData(ref Student.birthDay);
        Console.ReadKey()
    }
}

当我问生日时,我只需要约会,而不是时间。 有问题:

  1. 如何按用户更改输入日期的格式不是 mm / dd / yyyy
  2. 我如何操作输出格式日期?所以它不会是 yyyy-dd-mm 而是 dd / mm / yyyy dd.mm.yyyy
  3. 我想在C#中添加我真正的初学者,并尝试使用CultureInfoParseExactTryParse以及使用{0:'dd/mm/yyyy'}修改输出字符串的代码。

2 个答案:

答案 0 :(得分:1)

听起来DateTime.TryParseExact是一种很好的方法。

  

将指定的日期和时间字符串表示形式转换为它   DateTime等效使用指定的格式,特定于文化   格式信息和样式。字符串表示的格式   必须完全匹配指定的格式。该方法返回一个值   表示转换是否成功。

DateTime birthDay;
if(DateTime.TryParseExact(Console.ReadLine(), "MM/dd/yyyy", 
                          CultureInfo.InvariantCulture, 
                          DateTimeStyles.None, out birthDay)
{
    // Your input string can (and will) be parsed with MM/dd/yyyy format.
}
else
{
    // Invalid format or value.
}

顺便说一下,我将mm更改为MM,因为mm说明符是分钟,但MM说明符是几个月。

对于你的问题;

  

如何按用户更改输入日期将采用其他格式   MM / DD / YYY?

不能。这个可能会产生很多模棱两可的情况,例如01/02/2016的格式是什么?是dd/MM/yyyy还是MM/dd/yyyy?这完全取决于您居住的地方以及您使用的文化设置。

  

我如何操作输出格式日期?所以它不会   yyyy-dd-mm但dd / mm / yyyy或dd.mm.yyyy?

对于输出,如果您指的是Console.WriteLine部分,则此The "d" standard format specifier会使用运行此代码的CurrentCulture设置的ShortDatePattern。这意味着输出格式取决于当前的文化设置。如果此属性有dd/MM/yyyy,您会没事的。如果不是,则应使用自定义日期格式说明符(如;

)对其进行格式化
Console.WriteLine("Student was born in {0}", 
                  birthDay.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture));

答案 1 :(得分:0)

这允许用户以格式day/month/year输入并输出为dd.MM.yyyy

static void Main()
{
    Student newStudent = new Student();
    newStudent.GetStudentInformation();
    newStudent.PrintStudentData(ref Student.birthDay);
    Console.ReadKey();

    logEnd();
}
class Student
{
    static public DateTime birthDay;

    public void GetStudentInformation()
    {
        Console.WriteLine("Enter student's birth date as day/month/year");

        string[] formats = { "dd/MM/yyyy", "dd/M/yyyy", "d/M/yyyy", "d/MM/yyyy",
                "dd/MM/yy", "dd/M/yy", "d/M/yy", "d/MM/yy"};

        while (!DateTime.TryParseExact(Console.ReadLine(), formats,
             System.Globalization.CultureInfo.InvariantCulture,
             System.Globalization.DateTimeStyles.None,
             out birthDay))
        {
            Console.WriteLine("Your input is incorrect. Please input again.");
        }

        // User input correct, birthDay can now be used

    }
    public void PrintStudentData(ref DateTime birthDay)
    {
        Console.WriteLine("Student was born in {0}", birthDay.ToString("dd.MM.yyyy"));
    }
}