我正在使用 Firestore 编写一个网络应用程序,需要能够显示“今日热门帖子”,但在考虑不同时区的用户时,我无法正确获取查询。
日期以 UTC 0 形式存储在数据库中,然后通过Moment.js调整为客户端中当前用户的 UTC 偏移量。这工作正常。
添加新帖子时,我使用firebase.firestore.FieldValue.serverTimestamp()将当前服务器时间戳存储在名为 的字段中timestamp,如下所示:
const collectionRef = db.collection('posts');
collectionRef.add({
name: "Test Post",
content: "Blah blah blah",
timestamp: firebase.firestore.FieldValue.serverTimestamp(),
likeCount: 0
});
Run Code Online (Sandbox Code Playgroud)
然后在服务器上,我有一个云函数,它在创建时运行,并向文档添加另一个字段,称为datestampUTC 0 时间戳,但进行了调整,以便时间是一天的开始。该函数如下所示:
exports.updatePostDate = functions.firestore
.document('posts/{postID}')
.onCreate((event) => {
const db = admin.firestore();
const postRef = db.doc('post/'+event.params.postID);
const postData = event.data.data();
const startOfDay = moment(postData.timestamp).startOf('day').toDate();
return postRef.update({
datestamp: startOfDay
});
});
Run Code Online (Sandbox Code Playgroud)
存储时间始终是一天开始的时间戳使我能够编写这样的查询来查找所有帖子并按给定日期的受欢迎程度排序:
const startOfDayUTC = moment.utc().startOf('day').toDate();
const postQuery = db.collection('posts')
.orderBy('likeCount', 'desc')
.orderBy('timestamp', …Run Code Online (Sandbox Code Playgroud) 我试图获取一个字符串,确定它是否是日期(日期时间或时间),然后使用 SQL Server 转换格式常量将其转换为相应的数据类型。但是,我在 127 "yyyy-mm-ddThh:mi:ss.mmmZ" 方面遇到了很多麻烦,因为 ISDATE 对于以这种方式格式化的字符串返回 false。
SELECT ISDATE('2018-07-21 15:14:00.5206914 -06:00') -- returns false
Run Code Online (Sandbox Code Playgroud)
这是为什么?是否有任何我不知道的内置 SQL Server 函数可以测试这是否是有效的日期字符串?
我正在使用带有.NET/Entity Framework 4 RTM的Visual Studio 2010 RTM和模型驱动的设计方法.当我使用DateTimeOffset字段创建实体时,EF建模器会尝试将DateTimeOffset映射到SQL日期时间而不是SQL datetimeoffset.我正在使用SQL Server 2008 Express,因此数据库中支持datetimeoffset.
Visual Studio出现此错误:
2019年错误:指定的成员映射无效.类型'Data.SqlStorage.MyType'中成员'Created'的类型'Edm.DateTimeOffset [Nullable = False,DefaultValue =,Precision =]'与'SqlServer.datetime不兼容[Nullable = False,DefaultValue =,Precision = 3]'成员'创建'类型'Data.SqlStorage.Store.MyTypes
如果我直接在EDMX StorageModels xml部分编辑类型,我会收到以下错误:
错误40:类型datetimeoffset未使用命名空间或别名限定.只有PrimitiveTypes可以无限制地使用.
为什么建模者没有正确地将其映射到SQL datetimeoffset类型?当我还在使用Visual Studio 2010和.NET framework 4的beta版本时,也会出现此问题.
我有一个关于DateTimeOffset和夏令时的问题.为了解释我的问题,我们假设现在的日期和时间是:
11/6/2010 10:15:00 AM
Run Code Online (Sandbox Code Playgroud)
如果我运行此代码:
DateTimeOffset myTime = DateTimeOffset.Now;
Console.WriteLine("Local time: " + myTime.ToLocalTime().DateTime);
Run Code Online (Sandbox Code Playgroud)
然后我得到这个结果:
当地时间:11/6/2010 10:15:00 AM
意思是事件发生在早上10:15(我的时区是Mountain Daylight Time(-6 offset)).
所以,然后我将这个DateTimeOffset保存到我的SQL Server 2008 db(作为DateTimeOffset).第二天我想把它显示给用户.但现在夏令时已经到期.
如果我使用保存的关闭值运行上述WriteLine(从前一天)将显示什么?
存储在数据库中的偏移量为-6.但是现在夏令时结束了,目前的偏差是-7.因此,据我了解文档,它将首先将我的时间转换为UTC时间(所以它需要上午10:15并增加6小时(下午4:15).然后它将减去当地时间的当前偏移量(4:15) pm - 7 = 9:15 AM).
因此,如果我的数学是正确的,那么现在当我显示我的事件时,它将显示它发生在上午9:15而不是上午10:15.
这个不好.我想存储时区信息,但我需要时间在同一时区保持静态.(意思是如果事件发生在犹他州的上午10:15,那么下次我看它(在犹他州),我需要看到它是在上午10:15,无论夏令时是否发生了变化.
我不认为我是第一个遇到这个问题的人.别人怎么做才能解决这个问题?(或者我有错误吗?)
我正在尝试将以下格式的ISO8601格式化日期yyyy-MM-ddTHH:mm:ss.fffffff zzz用于.csv使用CsvHelper.
public System.DateTimeOffset ChangeDT { get; set; }
Map(m => m.ChangeDT).ConvertUsing<string>(row => row.GetField<DateTimeOffset>("ChangeDT").ToString("yyyy-MM-ddTHH:mm:ss.fffffff zzz"));
Run Code Online (Sandbox Code Playgroud)
虽然上面的代码产生:
6/10/2014 12:00:00 AM -05:00
Run Code Online (Sandbox Code Playgroud)
我正在寻找输出的是:
2014-06-10 12:00:00.1234567 -05:00
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
当我觉得它应该返回8.25时,下面的代码返回9.25,我有什么误解?
(new DateTimeOffset(2014,09,04,08,15,00,new TimeSpan(0,0,0))).Subtract(new DateTimeOffset(2014,09,04,08,15,00,new TimeSpan(0,0,0)).Date).TotalHours
Run Code Online (Sandbox Code Playgroud)
更简单地显示为: -
DateTimeOffset start = new DateTimeOffset(2014,09,04,08,15,00,new TimeSpan(0,0,0));
double result = start.Subtract(start.Date).TotalHours
Run Code Online (Sandbox Code Playgroud)
在时区GMT的Windows 7 PC上运行(调整为夏令时): -
9月12日结果= 9.25
12月12日结果= 8.25
我想找到一种方法,pandas.tseries.offsets以1秒的频率为交易时间构建一个自定义类.这里的主要要求是时间偏移对象足够聪明,知道"2015-06-18 16:00:00"的下一秒将是'2015-06-19 09:30:00或09:30: 01',从这两个时间戳计算的时间增量将精确为1秒(自定义偏移量1s,类似于BDay(1)工作日频率),而不是关闭时间的持续时间.
原因是当在几个交易日内绘制pd.Series的日内数据时,请看下面的模拟示例,在收盘价和次日开盘价之间有很多"阶梯线"(线性插值)来表示持续时间.关闭时间.有没有办法摆脱这个?我查看源代码pandas.tseries.offsets并查找pd.tseries.offsets.BusinessHour并pd.tseries.offsets.BusinessMixin可能有所帮助,但我不知道如何使用它们.
import pandas as pd
import numpy as np
from pandas.tseries.holiday import USFederalHolidayCalendar
from pandas.tseries.offsets import CustomBusinessDay
# set as 'constant' object shared by all codes in this script
BDAY_US = CustomBusinessDay(calender=USFederalHolidayCalendar())
sample_freq = '5min'
dates = pd.date_range(start='2015-01-01', end='2015-01-31', freq=BDAY_US).date
# exculde the 09:30:00 as it is included in the first time bucket
times = pd.date_range(start='09:30:00', end='16:00:00', freq=sample_freq).time[1:]
time_stamps = [dt.datetime.combine(date, time) for date in dates …Run Code Online (Sandbox Code Playgroud) 我正在Web服务中实现条件请求.后端可以轻松检索实体的最后修改日期,因此我发送Last-Modified并返回If-Modified-Since.HTTP日期的RFC指定的格式与.NET中的"R"格式说明符相同.
问题是DateTime.ToString("R")正确格式化日期,但传递"R"给ParseExact后面没有读取时区(有一个"往返"说明符"O",但它不是我需要的格式).这是LinqPad中的一个例子:
DateTime lastModified = new DateTime(2015, 10, 01, 00, 00, 00, DateTimeKind.Utc);
string lastModifiedField = lastModified.ToString("R"); // Thu, 01 Oct 2015 00:00:00 GMT
DateTime ifModifiedSince = DateTime.ParseExact(
lastModifiedField, "R", CultureInfo.InvariantCulture);
ifModifiedSince.Kind.Dump(); // Unspecified
Run Code Online (Sandbox Code Playgroud)
我当然可以使用解析的方法DateTime来迫使它进入我想要的格式,但我怎么能得到的框架,使用已经存在的数据?
我看了很多相关的问题,但似乎没有一个对我有用.
我正在尝试序列化UTC中的所有内容.这是我的代码:
class Class1
{
static void Main()
{
Class2 foo = new Class2();
JObject json = JObject.Parse(JsonConvert.SerializeObject(foo, new JsonSerializerSettings()
{
DateParseHandling = DateParseHandling.DateTimeOffset,
DateFormatHandling = DateFormatHandling.IsoDateFormat,
DateTimeZoneHandling = DateTimeZoneHandling.Utc
}));
Console.WriteLine(json.ToString());
Console.Read();
}
}
class Class2
{
public DateTimeOffset time = new DateTimeOffset(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddTicks(14663484000000000));
public DateTimeOffset time2 = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddTicks(14663484000000000);
public DateTime time3 = new DateTime(14663484000000000);
}
Run Code Online (Sandbox Code Playgroud)
这是输出:
{
"time": "2016-06-19T08:00:00-07:00",
"time2": "2016-06-19T08:00:00-07:00",
"time3": "0047-06-20T15:00:00Z"
}
Run Code Online (Sandbox Code Playgroud)
这是我想要获得的输出: …
如何将2019-09-05T11:31:34.059Z此DateTime转换为偏移量260。
数据库:mssql,数据类型:datetimeoffset(7)。
由于可以识别当前时间偏移,然后如何将给定日期转换为该时间偏移
datetimeoffset ×10
c# ×5
datetime ×4
.net ×2
.net-4.0 ×1
csvhelper ×1
iso8601 ×1
javascript ×1
json.net ×1
matplotlib ×1
node.js ×1
pandas ×1
python ×1
react-native ×1
reactjs ×1
sql ×1
sql-server ×1