我有两个日期值,一个已存储在数据库中,另一个由用户使用DatePicker选择.用例是从数据库中搜索特定日期.
先前在数据库中输入的值始终具有12:00:00的时间分量,其中从选择器输入的日期具有不同的时间分量.
我只对日期组件感兴趣,并且想要忽略时间组件.
在C#中进行这种比较的方法有哪些?
另外,如何在LINQ中执行此操作?
更新:在LINQ to Entities上,以下工作正常.
e => DateTime.Compare(e.FirstDate.Value, SecondDate) >= 0
Run Code Online (Sandbox Code Playgroud) c# linq linq-to-entities entity-framework datetime-comparison
在Golang中进行日期比较有什么选择吗?我必须根据日期和时间对数据进行排序 - 独立.因此,我可以允许在一系列日期内发生的对象,只要它也在一定范围内发生.在这个模型中,我不能简单地选择最早的日期,最年轻的时间/最晚的日期,最新的时间和Unix()秒来比较它们.我真的很感激任何建议.
最后,我写了一个时间解析字符串比较模块来检查时间是否在一个范围内.然而,这并不顺利; 我有一些差距问题.我会在这里发布,只是为了好玩,但我希望有更好的时间比较方式.
package main
import (
"strconv"
"strings"
)
func tryIndex(arr []string, index int, def string) string {
if index <= len(arr)-1 {
return arr[index]
}
return def
}
/*
* Takes two strings of format "hh:mm:ss" and compares them.
* Takes a function to compare individual sections (split by ":").
* Note: strings can actually be formatted like "h", "hh", "hh:m",
* "hh:mm", etc. Any missing parts will be added lazily.
*/
func timeCompare(a, b string, …
Run Code Online (Sandbox Code Playgroud) 请帮忙.我试图弄清楚如何在linq查询中使用DATE或DATETIME进行比较.
示例:如果我想要在今天之前启动的所有员工姓名,我会在SQL中执行以下操作:
SELECT EmployeeNameColumn
FROM EmployeeTable
WHERE StartDateColumn.Date <= GETDATE() //Today
Run Code Online (Sandbox Code Playgroud)
但是linq怎么样?
DateTime startDT = //Today
var EmployeeName =
from e in db.employee
where e.StartDateColumn <= startDT
Run Code Online (Sandbox Code Playgroud)
上面的WHERE不起作用:
异常详细信息:System.NotSupportedException:LINQ to Entities中不支持指定的类型成员"Date".仅支持初始值设定项,实体成员和实体导航属性.
我的C#单元测试有以下声明:
Assert.AreEqual(logoutTime, log.First().Timestamp);
Run Code Online (Sandbox Code Playgroud)
为什么它失败了以下信息:
Assert.AreEqual failed. Expected:<4/28/2010 2:30:37 PM>. Actual:<4/28/2010 2:30:37 PM>.
Run Code Online (Sandbox Code Playgroud)
他们不一样吗?
更新:
如果您只关注第二个,请使用此选项:
Assert.AreEqual(logoutTime.ToString(), log.First().Timestamp.ToString());
我刚刚注意到与DateTime比较似乎是一个荒谬的缺陷.
DateTime d = DateTime.Now;
DateTime dUtc = d.ToUniversalTime();
d == dUtc; // false
d.Equals(dUtc); //false
DateTime.Compare(d, dUtc) == 0; // false
Run Code Online (Sandbox Code Playgroud)
似乎DateTimes上的所有比较操作都无法执行任何类型的智能转换(如果一个是DateTimeKind.Local,一个是DateTimeKind.UTC).除了始终将比较中涉及的两者都转换为utc时间之外,这是一种更好的方法来可靠地比较DateTimes吗?
我正在比较似乎相同的两个日期,但它们包含不同的区域名称:一个是Etc/UTC
,另一个是UTC
.
根据这个问题:UTC和Etc/UTC时区之间有区别吗? - 这两个区域是相同的.但我的测试失败了:
import org.junit.Test;
import java.sql.Timestamp;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import static org.junit.Assert.assertEquals;
public class TestZoneDateTime {
@Test
public void compareEtcUtcWithUtc() {
ZonedDateTime now = ZonedDateTime.now();
ZonedDateTime zoneDateTimeEtcUtc = now.withZoneSameInstant(ZoneId.of("Etc/UTC"));
ZonedDateTime zoneDateTimeUtc = now.withZoneSameInstant(ZoneId.of("UTC"));
// This is okay
assertEquals(Timestamp.from(zoneDateTimeEtcUtc.toInstant()), Timestamp.from(zoneDateTimeUtc.toInstant()));
// This one fails
assertEquals(zoneDateTimeEtcUtc,zoneDateTimeUtc);
// This fails as well (of course previous line should be commented!)
assertEquals(0, zoneDateTimeEtcUtc.compareTo(zoneDateTimeUtc));
}
}
Run Code Online (Sandbox Code Playgroud)
结果:
java.lang.AssertionError:
Expected :2018-01-26T13:55:57.087Z[Etc/UTC]
Actual :2018-01-26T13:55:57.087Z[UTC]
Run Code Online (Sandbox Code Playgroud)
更具体地说,我希望,这ZoneId.of("UTC")
将等于ZoneId.of("Etc/UTC")
,但它们不是!
正如@NicolasHenneaux …
我已经在SO上发现了数百个关于主题的问题和答案,但是,没有一个与我的需求具体相符而且我很难过.
我有一个ymd格式的变量,我需要查看它是否是在前一个日历日创建的(不是之前的24小时,而是在前一个日历日).
即.$ tDate = '12 -05-2';
如果对象创建于2012年5月2日晚上11:59(存储时间),我需要与2012年5月3日上午12:01(当前时间)进行比较,以等于true.
如果对象创建于2012年5月2日晚上11:51(存储时间),我需要比较2012年5月2日晚上11:58(当前时间)等于false.
我知道如果这些存储在MySQL数据库中并从一个字段中提取,MySQL可以很容易地解决这个问题.但是,在这种情况下,该解决方案不是一种选择.
这种比较必须完全在php中完成.
我知道这是一个古怪的问题,但是,嘿,这就是StackOverflow的大师擅长的!期待看到回复!
UPDATE
把它想象成:
$dTest = '12-05-02';
$dTest = explode('-',$dTest);
$dTest2 = date('y-m-d');
$dTest2 = explode('-',$dTest2);
if ($dTest[2]<$dTest2[2]){
echo '<br />Posted Yesterday<br />';
} else {
echo '<br />Posted Today<br />';
}
Run Code Online (Sandbox Code Playgroud)
有更有效的解决方案吗?似乎工作,但我认为必须有一个更优化/优雅的解决方案?
解决了
$tHolder = '12-05-12';
$voteDate = date("y-m-d", strtotime($tHolder));
$today = date("y-m-d", strtotime("today"));
if ($voteDate === $today)
{
echo "this was today's post";
}
elseif ($voteDate < $today)
{
echo "this was previous to today";
}
Run Code Online (Sandbox Code Playgroud) 我听说人们说日期时间比较不起作用只是因为时间因素,因为datetime有时间部分.
在SQL中我总是像这样比较日期时间,它工作正常
select * from employee
where convert(varchar,dob,112) > '20111201' // this yyyymmdd format.
Run Code Online (Sandbox Code Playgroud)
我怎么能在LINQ查询中模拟这个?
c# t-sql linq-to-entities entity-framework datetime-comparison
我想在两个时间var open_time和var close_time之间检查var check_val
var open_time = "23:30";
var close_time = "06:30";
var check_val ="02:30";
if(Date.parse ( check_val ) > Date.parse ( open_time ) && Date.parse ( check_val ) < Date.parse ( close_time )){
var flag=1;
} else {
var flag=2
}
Run Code Online (Sandbox Code Playgroud)
结果总是其他部分
javascript time date-comparison datetime-conversion datetime-comparison
我的问题是如何比较startTime和endTime之间的两个时间,
比较两次.
我正在使用TimePickerDialog
for fetching时间,我正在使用一个方法传递参数,如long for startTime和endTime,我这样使用,
//Method:
boolean isTimeAfter(long startTime, long endTime) {
if (endTime < startTime) {
return false;
} else {
return true;
}
}
String strStartTime = edtStartTime.getText().toString();
String strEndTime = edtEndTime.getText().toString();
long lStartTime = Long.valueOf(strStartTime);
long lEndTime = Long.valueOf(strEndTime);
if (isTimeAfter(lStartTime, lEndTime)) {
} else {
}
Run Code Online (Sandbox Code Playgroud)
得到错误:
java.lang.NumberFormatException: Invalid long: "10:52"
Run Code Online (Sandbox Code Playgroud)
如何比较两次.请建议我.
c# ×5
datetime ×3
date ×2
linq ×2
.net ×1
.net-4.0 ×1
android ×1
comparison ×1
go ×1
java ×1
javascript ×1
php ×1
t-sql ×1
time ×1
unit-testing ×1