Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将整数转换为datetime并在c中比较日期#_C# - Fatal编程技术网

C# 将整数转换为datetime并在c中比较日期#

C# 将整数转换为datetime并在c中比较日期#,c#,C#,我在C#中解析两个整数到datetime时遇到了一个问题。我有两个整数,如下所示: int day = 25; int month = 08; var currentYear = DateTime.Now.Year; var scheduledDate = "25/08/2018"; 我想要的是将日、月和当前年份转换为dd/MM/yyyy格式,并将此日期与格式为dd/MM/yyyy的scheduledDate进行比较。有人能帮我吗 不应将DateTime对象转换为String对象,而应始终

我在C#中解析两个整数到datetime时遇到了一个问题。我有两个整数,如下所示:

int day = 25;
int month = 08; 
var currentYear = DateTime.Now.Year;

var scheduledDate = "25/08/2018";

我想要的是将
日、月和当前年份
转换为
dd/MM/yyyy
格式,并将此日期与格式为
dd/MM/yyyy
的scheduledDate进行比较。有人能帮我吗

不应将
DateTime
对象转换为
String
对象,而应始终将
String
转换为
DateTime
对象,然后进行比较

var yourDateTime = new DateTime(currentYear, month, day);
var yourDateString = yourDateTime.ToString("dd/MM/yyyy");
// compare
int day = 25;
int month = 08; 
var currentYear = DateTime.Now.Year;

var scheduledDate = "25/08/2018";
var dtScheduledDate = DateTime.ParseExact(scheduledDate, "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture);
var dtCurrentDate = new DateTime(currentYear, month, day);

if (dtScheduledDate < dtCurrentDate)
{
    // ...
}
int-day=25;
整月=08;
var currentYear=DateTime.Now.Year;
var scheduledDate=“25/08/2018”;
var dtScheduledDate=DateTime.ParseExact(scheduledDate,“dd/MM/yyyy”,System.Globalization.CultureInfo.InvariantCulture);
var dtCurrentDate=新日期时间(当前年、月、日);
if(dtScheduledDate
如果只想比较日期,则可以使用
DateTime的
date
属性

int day = 25;
int month = 08; 
var currentYear = DateTime.Now.Year;

var dateToCompare = new DateTime(currentYear, month, day);

var scheduledDt = "25/08/2018";
var scheduledDate = DateTime.ParseExact(scheduledDt, "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture);

if(dateToCompare.Date == scheduledDate.Date)
{
    //Your logic
}

POC:

尝试以下方法,您可以使用该方法将其转换为所需的格式

int day = 25;
int month = 08;
var currentYear = DateTime.Now.Year;

var date = new DateTime(DateTime.Now.Year, month, day);
var formattedDate = date.ToString("dd/MM/yyyy");

var scheduledDate = "25/08/2018";

// Compare formattedDate and scheduledDate

您可以考虑将调度日期字符串转换为日期时间,并比较日期时间对象,如果更合适的话:

var scheduledDate = "25/08/2018";
var parsedDate = DateTime.ParseExact(scheduledDate, "dd/MM/yyyy", CultureInfo.InvariantCulture);

var date = new DateTime(DateTime.Now.Year, month, day);

// compare date & parsed date
bool areEqual = date.Equals(parsedDate);

在这种情况下,如果变量
scheduleDate
是字符串,则可以将其他变量
(日、月和当前年)
转换为所需格式的字符串:

var dt = day + "/" + month  + "/" + currentYear;
因此,要进行比较,请执行以下操作:

if(dt.Equals(scheduleDate))
 //Do some
else
 //other thing

如果我理解你的问题,就保持零

int day = 25;
int month = 08;
var currentYear = DateTime.Now.Year;            
var targetDate = $"{day}/{month.ToString().PadLeft(2,'0')}/{currentYear}";
var scheduledDate = "25/08/2018";
var difference = DateTime.Compare(DateTime.Parse(targetDate), 
DateTime.Parse(scheduledDate));

如果您只想将其转换为字符串,这应该是最简单的方法:

int day = 25;
int month = 08;
var currentYear = DateTime.Now.Year;

// {day:D2} is equivalent to day.ToString("D2") which pads integers to a length of two
var createdDate = $"{day:D2}/{month:D2}/{currentYear}";

var scheduledDate = "25/08/2018";
编辑
根据这里的人们所说的几点,将两者解析为
DateTime
可能更适合比较部分:

DateTime createdDateTime = new DateTime(currentYear, month, day);

DateTime scheduledDateTime = DateTime.ParseExact(scheduledDate, "dd/MM/yyyy", CultureInfo.InvariantCulture);

// Compare if it's the same day
if (createdDateTime.Date == scheduledDateTime.Date)
{
    // do stuff
}

// Get the difference in Days
int dayDifference = (createdDateTime - scheduledDateTime).Days;
或者,
.TotalDays
而不是
。Days
返回一个
双精度

静态void Main(字符串[]args)
static void Main(string[] args)
{

    int transactionDate = 20201010;
    int? transactionTime = 210000;

    var agreementDate = DateTime.Today;
    var previousDate = agreementDate.AddDays(-1);

    var agreementHour = 22;
    var agreementMinute = 0;
    var agreementSecond = 0;

    var startDate = new DateTime(previousDate.Year, previousDate.Month, previousDate.Day, agreementHour, agreementMinute, agreementSecond);
    var endDate = new DateTime(agreementDate.Year, agreementDate.Month, agreementDate.Day, agreementHour, agreementMinute, agreementSecond);

    DateTime selectedDate = Convert.ToDateTime(transactionDate.ToString().Substring(6, 2) + "/" + transactionDate.ToString().Substring(4, 2) + "/" + transactionDate.ToString().Substring(0, 4) + " " + string.Format("{0:00:00:00}", transactionTime));

    Console.WriteLine("Selected Date : " + selectedDate.ToString());
    Console.WriteLine("Start Date : " + startDate.ToString());
    Console.WriteLine("End Date : " + endDate.ToString());

    if (selectedDate > startDate && selectedDate <= endDate)
        Console.WriteLine("Between two dates..");
    else if (selectedDate <= startDate)
        Console.WriteLine("Less than or equal to the start date!");
    else if (selectedDate > endDate)
        Console.WriteLine("Greater than end date!");
    else
        Console.WriteLine("Out of date ranges!");
}
{ int transactionDate=20201010; int?交易时间=210000; var agreementDate=DateTime.Today; var previousDate=协议日期。添加天数(-1); var agreementHour=22; var agreementMinute=0; var agreementSecond=0; var startDate=新日期时间(previousDate.Year,previousDate.Month,previousDate.Day,agreementHour,agreementMinute,agreementSecond); var endDate=新的日期时间(agreementDate.Year、agreementDate.Month、agreementDate.Day、agreementHour、agreementMinute、agreementSecond); DateTime selectedDate=Convert.ToDateTime(transactionDate.ToString().Substring(6,2)+“/”+transactionDate.ToString().Substring(4,2)+“/”+transactionDate.ToString().Substring(0,4)+“+string.Format(“{0:00:00}”,transactionTime)); Console.WriteLine(“所选日期:+selectedDate.ToString()); Console.WriteLine(“开始日期:+startDate.ToString()); Console.WriteLine(“结束日期:+endDate.ToString());
如果(selectedDate>startDate&&selectedDate),您可以将它们连接起来
var-date=$“{day}/{month}/{currentYear}”
我希望在日或月之前保留任何之前的0。忘记特定格式和前导零等。只需创建一个具有正确日期的日期对象,并将其与另一个日期对象进行比较。诸如dd/mm/yyyy之类的格式仅用于显示目的。当您确实要处理或计算日期或时间时,请使用日期或时间DateTime对象,不使用任何特定的格式。当你想向用户显示日期或时间时,你才担心格式。为什么要将
DateTime
对象转换为字符串,而不是将
string
转换为
DateTime
?@SeM:Guy说他想比较字符串,所以它就这样做了,没什么,没什么Lessy你总是可以选择向某人展示一种“正确”(无论这意味着什么)的做事方式。@SeM:你不知道他到底想要什么,我没有看到整个编码比较字符串是比较日期的一种糟糕方式。我理解ADyson先生。我给出了这个解决方案,当然我可以看到我们想要比较的另一个变量是字符串(var scheduledDate=“25/08/2018”;)正确,但实际上OP没有说明他们想要什么样的比较。如果他们想要简单的等于,那么字符串比较就可以了,假设两种情况下使用完全相同的格式。但是如果他们想要小于/大于,那么对于日期,字符串比较就不能按预期工作(特别是像dd/mm/yyyy这样的格式)
static void Main(string[] args)
{

    int transactionDate = 20201010;
    int? transactionTime = 210000;

    var agreementDate = DateTime.Today;
    var previousDate = agreementDate.AddDays(-1);

    var agreementHour = 22;
    var agreementMinute = 0;
    var agreementSecond = 0;

    var startDate = new DateTime(previousDate.Year, previousDate.Month, previousDate.Day, agreementHour, agreementMinute, agreementSecond);
    var endDate = new DateTime(agreementDate.Year, agreementDate.Month, agreementDate.Day, agreementHour, agreementMinute, agreementSecond);

    DateTime selectedDate = Convert.ToDateTime(transactionDate.ToString().Substring(6, 2) + "/" + transactionDate.ToString().Substring(4, 2) + "/" + transactionDate.ToString().Substring(0, 4) + " " + string.Format("{0:00:00:00}", transactionTime));

    Console.WriteLine("Selected Date : " + selectedDate.ToString());
    Console.WriteLine("Start Date : " + startDate.ToString());
    Console.WriteLine("End Date : " + endDate.ToString());

    if (selectedDate > startDate && selectedDate <= endDate)
        Console.WriteLine("Between two dates..");
    else if (selectedDate <= startDate)
        Console.WriteLine("Less than or equal to the start date!");
    else if (selectedDate > endDate)
        Console.WriteLine("Greater than end date!");
    else
        Console.WriteLine("Out of date ranges!");
}