在我的应用程序中,用户选择日期 + 时间和时区。此选择必须显示给他们自己时区的其他用户,这意味着如果来自纽约的用户 A 选择美国东部时间 8 月 8 日凌晨 3:00,来自北京的用户 B 将看到此日期时间转换为中国标准时间 (CST)。
为此,我想 - 好的,我保存用户 A 的日期并告诉他从 4 个时区中进行选择。服务器端我使用时刻时区将其从他的 EDT 选择转换为 UTC,并将其保存为 UTC 在数据库中,以便当我阅读它时,我根据他们自己的时区将其转换回其他用户。
这是一种正确的方法还是我把事情复杂化了?目的是用户 A 可以选择她想要的时区,数据库保存为标准化的 UTC,目标用户在他自己的时区中看到。
(我在服务器端使用 node.js 顺便说一句)谢谢,
我的JavaScript应用程序必须创建事件,并将其作为UTC存储在数据库中,以便事后可以在3个不同的时区中显示它们。
我发现很难弄清楚的棘手部分是,在创建事件时,用户必须选择时区以及日期。
这个想法是:-用户从带有时区的其他下拉列表中选择日期+所需时区。-我将UTC存储在数据库中-所有用户在3个不同的时区中看到日期。
您可能会问为什么在选择带有日期选择器的日期时,默认情况下任何人都需要其他下拉列表来选择另一个时区。
例子:让美国公民吉姆(Jim)在美国东部时间(EDT)华盛顿时间安排他的一生。他正在访问中国,进入一家中国网吧,并希望使用此应用来计划活动。日期选择器将选择本地时区,即中国标准时间。但是Jim希望通过EDT进行计划,并确保该应用程序能够正确处理所有事情。
因此,他必须专门从其他下拉列表中选择所需的时区。
所以我的问题是。因为我允许用户选择所需的时区,所以我首先必须将用户输入的日期转换为该时区,然后再将其转换为UTC,然后再进行存储吗?还是在将事件保存到数据库时对时区转换完全不感兴趣?
那么哪一步是正确的:-获取本地日期+所选时区-将本地日期转换为用户所选时区-将日期转换为UTC-存储到数据库-读取时,使用所选时区转换为3个时区
或-获取本地日期+所选时区-将日期转换为UTC,不考虑时区-存储到数据库-读取时,使用所选时区转换为3个时区
稍后编辑-我在流星中执行此操作,因此是javascript服务器端。DB是mongodb,因此出于性能原因,日期必须另存为JS日期对象(当然是utc)。
第二次编辑
下面是我尝试过的实现(如我输入事件日期07:00 AM KST,输出从数据库读回并在该KST时区转换回的最终结果时,除07:00之外,它不起作用上午)
一切都从这里开始-这是一种服务器端方法,它从日期选择器中读取日期,从时间选择器中读取时间,并从下拉列表中读取时区:
var pStartDate = GetDateAndTimeFromPostData(eventAttributes.startDate, eventAttributes.startTime, eventAttributes.timezone);
Run Code Online (Sandbox Code Playgroud)
在这里,我尝试从不同的控件(datepicker,timepicker,时区ddl)构建所选日期:
function GetDateAndTimeFromPostData(dt, tm, timezone)
{
var t = tm.split(":");
var hour = t[0];
var min = t[1];
var finalDate = new Date(dt.getFullYear(), dt.getMonth(), dt.getDate(), hour, min);
var utcConverted = ConvertUserTimezoneToServerTimezone(finalDate, timezone);
return utcConverted;
}
Run Code Online (Sandbox Code Playgroud)
在这里我尝试时区转换:
function ConvertUserTimezoneToServerTimezone(dateToConvert, tz)
{
var userTimezonedDate;
switch(tz)
{
case "EDT":
{
userTimezonedDate = moment.tz(dateToConvert, "America/New_York");
break;
}
case "CEST":
{
userTimezonedDate = moment.tz(dateToConvert, …Run Code Online (Sandbox Code Playgroud) 我正在尝试搜索字符串中的电子邮件地址,但是当字符串包含除电子邮件之外的其他字符时,我的正则表达式不起作用.意思是,如果我尝试像"me@email.com"这样的小字符串,正则表达式会找到一个匹配项.如果我在字符串中插入一个空格,例如:"me@mail.com",则正则表达式找不到电子邮件匹配项.
这是我的代码(正则表达式模式来自网络):
string emailpattern = @"^(([^<>()[\]\\.,;:\s@\""]+"
+ @"(\.[^<>()[\]\\.,;:\s@\""]+)*)|(\"".+\""))@"
+ @"((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"
+ @"\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+"
+ @"[a-zA-Z]{2,}))$";
Regex rEmail = new Regex(emailpattern);
string str = @" me@mail.com";
MatchCollection mcolResults = rEmail.Matches(str);
MessageBox.Show(mcolResults.Count.ToString());
Run Code Online (Sandbox Code Playgroud)
请让我知道我做错了什么.
谢谢.
最好的祝福,
我有一个关于从 long 到 int 的强制转换的安全性的问题。我担心我写的方法可能会在这次转换中失败。您能否看一下下面的代码并告诉我是否可以编写一些可以避免可能失败的内容?
先感谢您。
public static string ReadDecrypted(string fileFullPath)
{
string result = string.Empty;
using (FileStream fs = new FileStream(fileFullPath, FileMode.Open, FileAccess.Read))
{
int fsLength = (int)fs.Length;
byte[] decrypted;
byte[] read = new byte[fsLength];
if (fs.CanRead)
{
fs.Read(read, 0, fsLength);
decrypted = ProtectedData.Unprotect(read, CreateEntropy(), DataProtectionScope.CurrentUser);
result = Utils.AppDefaultEncoding.GetString(decrypted, 0, decrypted.Length);
}
}
return result;
}
Run Code Online (Sandbox Code Playgroud) 我想要获得的是一种通过预定义的步骤顺序生成小部件的方法:小部件1 - >小部件2 - >小部件3 - >完成。我想到制作一个小部件列表,以及“前进”到下一个小部件的方法是调用moveNext()迭代器。但显然我错过了一些东西:
根据此处的文档,如果在迭代器上调用 moveNext() 并返回 true,则之后iterator.current将不为 null。打印时print(hasAdvanced)返回true, soiterator.current不应为空。但它是。为什么它是空的?我缺少什么?
import 'package:flutter/material.dart';
class CreatePageWidget extends StatefulWidget {
@override
_CreatePageState createState() => _CreatePageState();
}
class _CreatePageState extends State<CreatePageWidget> {
List<Widget> sequence = [Text("one"), Text("two")];
@override
void initState() {
super.initState();
bool hasAdvanced = sequence.iterator.moveNext();
print(hasAdvanced);
print(sequence.iterator.current);
}
@override
Widget build(BuildContext context) => sequence.iterator.current;
}
Run Code Online (Sandbox Code Playgroud) 我试图使用Sequelize.js来映射MySQL表中的所有列.
mysql表"User"有一个Password列作为类型varbinary(50).
Sequelize.js是否支持varbinary类型的映射?我没有在Sequelize文档中看到这样的选项,还有另外一种方法可以映射它吗?
我有以下代码:
class Program
{
static void Main(string[] args)
{
var watcher = new SNotifier(DumpToConsole);
watcher.StartQueue();
Console.ReadLine();
}
private static void DumpToConsole(IList<Timestamped<int>> currentCol)
{
Console.WriteLine("buffer time elapsed, current collection contents is: {0} items.", currentCol.Count);
Console.WriteLine("holder has: {0}", currentCol.Count);
}
}
Run Code Online (Sandbox Code Playgroud)
SNotifier:
public class SNotifier
{
private BlockingCollection<int> _holderQueue;
private readonly Action<IList<Timestamped<int>>> _dumpAction;
public SNotifier(Action<IList<Timestamped<int>>> dumpAction)
{
PopulateListWithStartValues();
_dumpAction = dumpAction;
}
public void StartQueue()
{
PopulateQueueOnDiffThread();
var observableCollection = _holderQueue.ToObservable();
var myCollectionTimestamped = observableCollection.Timestamp();
var bufferedTimestampedCollection = myCollectionTimestamped.Buffer(TimeSpan.FromSeconds(3), TimeSpan.FromSeconds(3));
using (bufferedTimestampedCollection.Subscribe(_dumpAction)) …Run Code Online (Sandbox Code Playgroud) 我想创建一个虚拟演示网站,展示我的.NET网络编程技巧; 我可以在我的博客上找到这个虚拟网站的链接,并在访谈时显示.
如果您需要创建一个展示您的Web编程技能的演示文稿网站,该网站将包含哪些功能?或者,如果您是招聘人员,您希望在这样的网站上看到什么?
我需要一些我可以在那里实现的Web应用程序示例.有人告诉我,我已经可以制作一个digg it系统,所以现在我正在研究它.前端,后端,任何提示中的任何内容都可以帮助我.
如何确保某个类的某个实例永远不会为null?有人告诉我使用Debug.Assert(),但这样做,我只会确保代码在调试模式下工作,而我想确保在发布中的is-never-null条件.
例如,在过去我编写的代码如下:
public string MyString
{
get
{
if(instance1.property1.Equals("bla"))
{
return bla;
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是如果instance1为null,则抛出异常.我想避免犯这样的错误并在将来产生这样的例外.
谢谢,
请参阅下面的具体示例,说明问题:
我有一种方法,可以根据服务器的响应对用户进行身份验证.方法是这样的:
/// <summary>
/// attempts authentication for current user
/// </summary>
/// <returns></returns>
public AuthResult CheckUser()
{
WebRequest request = WebRequest.Create(GetServerURI);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
string postdata = "data=" + HttpUtility.UrlEncode(SerializeAuth());
byte[] arr = Utils.AppDefaultEncoding.GetBytes(postdata);
request.ContentLength = arr.Length;
request.Timeout = Convert.ToInt32(TimeUtils.GetMiliseconds(10, TimeUtils.TimeSelect.Seconds));
Stream strToWrite = request.GetRequestStream();
strToWrite.Write(arr, 0, arr.Length);
WebResponse response = request.GetResponse();
using (Stream dataFromResponse = response.GetResponseStream())
{
using …Run Code Online (Sandbox Code Playgroud) 当我尝试在LINQ to Entities中运行以下查询时出现错误:
var query = DBConn.myView
.Select(dm => new App.DTOs.MyDTO
{
ID = dm.ID,
Prop1 = dm.Prop1
....
})
.Where(dm => dm.TypeID != 4);
Run Code Online (Sandbox Code Playgroud)
错误消息是:
LINQ expression node type 'TypeID' is not supported in LINQ to Entities
Run Code Online (Sandbox Code Playgroud)
它在.ToList()通话中失败:
private List<MyDTO> lstDTO;
lstDTO = query.ToList();
Run Code Online (Sandbox Code Playgroud)
但是,如果我.Where()从查询中删除它,它的工作原理.有没有办法在Where这个查询中使用该子句?
c# ×5
datetime ×2
javascript ×2
node.js ×2
timezone ×2
asp.net ×1
casting ×1
coding-style ×1
dart ×1
filestream ×1
flutter ×1
iqueryable ×1
iterator ×1
linq ×1
momentjs ×1
portfolio ×1
regex ×1
sequelize.js ×1