سؤال

أحتاج إلى مقارنة قيمتي التاريخ لتحديد المساواة (بالضبط نفس الشيء)، باستخدام الدقة الدقيقة. هل هذه هي أفضل طريقة للقيام بذلك؟ قد يكون تواريخي ثواني وملي ثانية، لكنني أريد أن أعتبر فقط حتى دقائق.

       where (Math.Abs(datetime1.Subtract(datetime2).TotalMinutes) == 0)
هل كانت مفيدة؟

المحلول

التحقق مما إذا كان Math.Abs(diff.TotalMinutes) == 0 لن تفعل ذلك، لا - هذا هو التحقق مما إذا كانت بالضبط نفس الشيء.

هل تحاول التحقق مما إذا كانت لها نفس الدقيقة، أو ما إذا كانوا أقل من دقيقة واحدة؟ لأول استخدام:

where RoundToMinute(dateTime1) == RoundToMinute(dateTime2)

بعد أن أعلن:

public static DateTime RoundToMinute(DateTime time)
{
    return new DateTime(time.Year, time.Month, time.Day,
                        time.Hour, time.Minute, 0, time.Kind);
}

للثاني، استخدم:

where Math.Abs((dateTime1 - dateTime2).TotalMinutes) < 1

يجب أن تفكر في ما تريد أن تكون النتيجة في حالة وجودها محلية واحدة في UTC، بالمناسبة ...

لاحظ أنه لا يوجد شيء خاص Linq هنا - افتراض أنك تستخدم LinQ إلى الكائنات. إذا كنت تستخدم LinQ إلى SQL، فمن الواضح أنك لا تستطيع استخدام الأساليب المحلية، وسيتعين علينا أن ننظر مرة أخرى ...

تحرير: ما زلت غير واضح للغاية على سؤالك. إذا كنت في حاجة إليها ليكون بالضبط نفس التاريخ / الوقت، من السهل (ترك جانبا مشكلة محلية VS UTC المحتملة):

where dateTime1 == dateTime2

ومع ذلك، فإن هذا يطرح مسألة سبب ذكرك "الدقة الدقيقة" في عنوان السؤال أو "استخدام الدقة لمدة دقيقة" في جسم السؤال.

نصائح أخرى

ماذا عن

where (Math.Floor(datetime1.Ticks / 600000000) == Math.Floor(datetime2.Ticks / 600000000))

?

شكرا لين، ستفعل ذلك (لا يزال يجري بالضبط كيفية عمل العملية!). هنا هو مقتطف التعليمات البرمجية التي تشير إلى الإجابة التي توصلت إليها في البداية:

(math.abs (datetime1.subtract (datetime2). totalminutes) == 0)

الخلفية: ضمن جملة Query الخاصة بي Linq (وبالتالي بطانة واحدة)، أحتاج إلى التحقق مما إذا كانت DateTime1 و DateTime2 هي نفسها تماما. قيم DateTime قيد الدراسة هي تواريخ ختم للقيم الأخرى المستخدمة في الاستعلام.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top