我有日期时间字符串
dateStr = "2017-03-21T23:00:00.000Z";
然后我打电话
var date = DateTime.Parse(dateStr);
意外地我的日期等于
22.03.2017 00:00:00
我预计它将是21.03.2017 这里发生了什么?
答案 0 :(得分:4)
DateTime.Parse()
是特定于语言环境的,在解析日期时会考虑您的本地时区。
如果您在冬季参加CET(中欧时间),您的抵消时间比UTC早一个小时。给定的日期标有Z
,表示它是UTC格式,因此DateTime.Parse()
会将其调整为您当地的时区。
有override允许您根据需要更改该行为,方法是指定特定的DateTimeStyles枚举。 DateTimeStyles.AdjustToUniversal
正是您所寻找的,因为它应该将DateTime保持为UTC。
如果您之后只想要日期部分,则可以在.Date
DateTime
对象上致电Parse()
所以,像这样:
var date = DateTime.Parse(dateStr, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal).Date;
答案 1 :(得分:0)
如果日期格式没有改变,那么您可以使用以下代码从日期字符串中获取日期部分。但由于它严格依赖输入格式,因此风险很大。
string dateStr = "2017-03-21T23:00:00.000Z";
int year = Int32.Parse(dateStr.Substring(0, 4));
int month = Int32.Parse(dateStr.Substring(5, 2));
int day = Int32.Parse(dateStr.Substring(8, 2));
var date = new DateTime(year, month, day);
Console.WriteLine(date);
答案 2 :(得分:0)
因为'DateTime'变量类型的格式是'YYYY-MM-DD hh:mm:ss'。 如果您运行此代码:
public interface LogConnectionDao extends JpaRepository<LogConnection,Long> {
}
你会看到'24 / 03/2017 2017:54:47' 如果您有'YYYY-MM-DD'格式,请添加.ToString(“dd-MM-yyyy”),然后:
var dt = DateTime.Now;
Console.WriteLine(dt);
结果:'24 -03-2017'