【问题标题】:How to write Date in C# [duplicate]如何在 C# 中编写日期 [重复]
【发布时间】:2020-01-08 16:51:55
【问题描述】:

我不知道如何在 C# 中编写日期时间,更具体地说,这是日期时间的默认格式。我有两节课。一个是 Student,第二个是 DiplomiraniStudent(意思是毕业的学生)。班级学生有属性 ime(英文名)、prezime(英文名)、jmbag 是学生的特殊 id、imeObrUstanove(英文名教育机构)、nazivStudija(英文名学习)、datUpisStudija( engl. 学生注册学习的日期)和第二类继承第一类。第二类 DiplomiraniStudent 只有一个属性,即 datZavrStudija(英语。学生毕业的日期)。在第一堂课中,我编写了返回格式化字符串的方法,在第二堂课中,我编写了覆盖方法。在程序中,我不知道如何编写日期时间。这称为日期时间格式错误。我不知道我应该指定日期的格式还是有一些.NET框架已经使用的格式。这是我的代码。

班学生

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

namespace Vjezba_4
{
    class Student
    {
        public string ime { get; set; }
        public string prezime { get; set; }
        public string jmbag { get; set; }
        public string imeObrUstanove { get; set; }
        public string nazivStudija { get; set; }
        public DateTime datUpisStudija { get; set; }

        public Student(string Ime, string Prezime, string Jmbag, string ImeObrUstanove, string NazivStudija, DateTime DatUpisStudija)
        {
            this.ime = Ime;
            this.prezime = Prezime;
            this.jmbag = Jmbag;
            this.imeObrUstanove = ImeObrUstanove;
            this.nazivStudija = NazivStudija;
            this.datUpisStudija = DatUpisStudija;
        }
        public Student() {}

        public virtual string PodaciOStudentu()
        {
            return String.Format(this.ime, this.prezime, this.jmbag, this.imeObrUstanove, this.nazivStudija, this.datUpisStudija);
        }
    }
}

类文凭学生

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

namespace Vjezba_4
{
    class DiplomiraniStudent:Student
    {
        public DateTime datZavrStudija { get; set; }

        public DiplomiraniStudent(string Ime, string Prezime, string Jmbag, string ImeObrUstanove, string NazivStudija, DateTime DatUpisStudija, DateTime DatZavrStudija): base(Ime, Prezime, Jmbag, ImeObrUstanove, NazivStudija, DatUpisStudija)
        {
            this.datZavrStudija = DatZavrStudija;
        }
        public DiplomiraniStudent() {}

        public override string PodaciOStudentu()
        {
            return String.Format(this.ime, this.prezime, this.jmbag, this.imeObrUstanove, this.nazivStudija, this.datUpisStudija, this.datZavrStudija);
        }
    }
}

程序

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

namespace Vjezba_4
{
    class Program
    {
        static void Main(string[] args)
        {
            Student student = new Student("Jakov", "Jaki", "549900871", "Veleučilište Velika Gorica", "Održavanje računalnih sustava", 17.07.2018);
            DiplomiraniStudent dipstudent = new DiplomiraniStudent("Mate", "Matić", "Veleučilište Velika Gorica", "Održavanje računalnih sustava", 19.07.2014, 25.06.2019);

            Console.WriteLine(student.PodaciOStudentu());
            Console.WriteLine(student.ime);
            Console.WriteLine(student.prezime);
            Console.WriteLine(student.jmbag);
            Console.WriteLine(student.imeObrUstanove);
            Console.WriteLine(student.nazivStudija);
            Console.WriteLine(student.datUpisStudija);
            Console.WriteLine();
            Console.WriteLine(dipstudent.PodaciOStudentu());
            Console.WriteLine(dipstudent.ime);
            Console.WriteLine(dipstudent.prezime);
            Console.WriteLine(dipstudent.jmbag);
            Console.WriteLine(dipstudent.imeObrUstanove);
            Console.WriteLine(dipstudent.nazivStudija);
            Console.WriteLine(dipstudent.datUpisStudija);
            Console.WriteLine(dipstudent.datZavrStudija);
        }
    }
}

【问题讨论】:

  • 试试new DateTime(year, month, day etc) as specified in the docs
  • C# 中没有 Date 文字,这似乎是您要查找的内容。

标签: c#


【解决方案1】:

你想像这样使用DateTime.ToString: DateTime.Now.ToString("MM/dd/yyyy")

可用格式列表为here。

编辑:在看到您用于Student 的构造函数调用后,我得出结论,您根本没有传递DateTime;没有像大多数数字类型一样初始化DateTime 对象的速记方法。您需要使用实际的 DateTime 构造函数,如 MX D 所述:

new DateTime(2018, 07, 17)

【讨论】:

  • 或者,比如说,阅读副本:P
  • @HereticMonkey 抱歉,没有看到重复的帖子。 Read the duplicate!哈哈
【解决方案2】:

要创建学生,您可以使用 DateTime 构造函数,该构造函数包含年、月和日:

Student student = new Student("Jakov", "Jaki", "549900871", "Veleučilište Velika Gorica", 
    "Održavanje računalnih sustava", new DateTime(2018, 7, 17));

DiplomiraniStudent dipstudent = new DiplomiraniStudent("Mate", "Matić", 
    "Veleučilište Velika Gorica", "Održavanje računalnih sustava", 
    new DateTime(2014, 7, 19), new DateTime(2019, 6, 25));

然后,当将日期时间输出为字符串时,您可以使用dat.ToShortDateString()(或dat.ToLongDateString(),或者您可以使用dat.ToString(customFormatString)指定自定义字符串格式)。

例如:

public override string PodaciOStudentu()
{
    return $"{ime} {prezime} {jmbag} {imeObrUstanove} {nazivStudija} " + 
        $"{datUpisStudija.ToShortDateString()} {datZavrStudija.ToShortDateString()}");
}

有关DateTime 字符串格式的更多信息,请查看Standard DateTime Format Strings 和Custom DateTime Format Strings

【讨论】:

  • 建议的副本中是否缺少您认为缺少的东西?
  • @HereticMonkey 是的,我回答的后半部分...... :)
  • 当然我们也有这样的副本......
【解决方案3】:

您只需要在解析时指定正确的文化信息

DateTime.Parse("17.07.2018", CultureInfo.GetCultureInfo("hr-HR"))

【讨论】:

    【解决方案4】:

    在您的情况下,我建议使用函数将字符串转换为日期,方法是使用 ParseExact 并指定格式。如果您将来更改格式或其他格式,这会有所帮助。

    private static DateTime ParseDate(string providedDate)
    {
        DateTime validDate;
        string[] formats = { "dd.MM.yyyy" };
        var dateFormatIsValid = DateTime.TryParseExact(
          providedDate,
          formats,
          CultureInfo.InvariantCulture,
          DateTimeStyles.None,
          out validDate);
        return dateFormatIsValid ? validDate : DateTime.MinValue;
    }
    

    如何使用

    var mydate = ParseDate("17.07.2018");
    

    在你的情况下,你应该做类似的事情

    var student = new Student(....., ParseDate("17.07.2018"));
    var dipstudent = new DiplomiraniStudent(...., ParseDate("19.07.2014"), ParseDate("25.06.2019"));
    

    【讨论】:

    • 当您可以更有效地使用new DateTime(2018, 7, 17) 时,为什么要解析字符串文字来创建DateTime?
    • @KrishnaMuppalla 为什么这样会很理想?
    • @HereticMonkey 为什么 DateTime.Parse 已经为您解析字符串为年、月和日? “重新发明轮子”绝不是好建议。
    • OP 没有使用字符串@Josh。
    • @HereticMonkey 在此示例中,他没有使用 DateTime 或年、月、日的单独值。这显然是一个日期时间格式的字符串,他只是没有加引号。这不会按原样编译。
    猜你喜欢
    • 2016-11-26
    • 2021-05-30
    • 1970-01-01
    • 2017-11-21
    • 1970-01-01
    • 2013-07-06
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多