- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将用户输入的日期解析为 MySQL 时间戳格式 (YYYY-MM-DD)。用户输入可能类似于:
input - wanted conversion1) January - ThisYear-01-01, ThisYear-01-312) February 2017 - 2017-02-01, 2017-02-283) 01. April 2016 - 2016-04-014) 5.4.15 - 2015-04-05
P.S.: The examples above are the suggested formats that we want to support (supporting only some of them would be also fine).The users are not random or international, they will always write and understand dates in this format (Day Month Year).
Handling the missing year entry or the zero (like 5/4 in #4) isn't a problem but finding a proper way to handle the mentioned possible date input formats (DD MM YY, DD MM, DD Month, Month, Month YY, DD Month YY....etc.) with something that doesn't look very ugly and long in code is a little bit hard for me to imagine.
P.S.:
D,DD,MM,YY,YYYY are short for the numerical input.
Month is for the word input variant.
Could you please tell me if there is anything that could help me to make this process easier/more readable or at least point me to the right direction?
Thanks
Update #1:By looking again to my question above i see that it's missing some background information, but i didn't want to write a long description to it, just only to the wanted function. Sorry.
So here are some general infos about the Program:The Program is a Chatbot written in C# (UWP) which accepts a user request in natural language and give back the requested info (if recognized) from a mySQL DB (DB is based on a OSTicket support system).
Internally we send the user input to LUIS.ai to get it recognized and we get back the intents and entities from the service, which we then parse to a SQL Query and send it to the DB.The results from the DB are then sent back to the user.
Many parsed queries work perfectly, that's why i want now to extend it by letting the user give a certain date in the request (e.g. give me all the support tickets from April).What i only want is to take this new input "April" and convert it to a MySQL TimeStamp format, so that it would be also recognized from MySQL.
My current approach is to build a string like this:
string convertedTS = year + "-" + month + "-" + day;
并使用 3 个函数尝试检测所有三个变量。但现在就这样了。
例如“给我四月份的所有门票”:四月(从 LUIS AI 识别为给定日期)将转换为 (04)年份将从
DateTime.Today.Year
也插入了 (2018-04)第一天始终为 01,该月的最后一天为:
DateTime.Today.Year
示例的最终查询:
select ..........between '2018-04-01' AND '2017-04-30'
最佳答案
如果您担心年、月、日等的格式,那么您就错了。您有 C#,并且有来自用户的日期字符串。您关心的是将该字符串转换为 C# DateTime 值。 MySql 没有参与其中。
一旦您获得了 DateTime 值,就可以让您的连接提供商担心通过参数化查询进行格式化:
DateTime d = GetMyDateTimeValueFromUser();
string sql = "pretend SQL comnand with a datetime @variable";
using (var cn = new MySqlConnection("connection string here"))
using (var cmd = new MySqlCommand(sql, cn))
{
cmd.Parameters.Add("@variable", MySqlDbType.Timestamp).Value = d;
cn.Open();
//pick one.
cmd.ExecuteReader();
cmd.ExecuteNonQuery();
}
不需要特殊的 SQL 格式。 如果您没有使用参数化查询,您的做法就不正确!这不仅仅适用于 DateTime 值。 SQL 语句中使用的所有数据都应以这种方式处理。这对安全和性能的影响远远超出了简单的日期值。传递参数,或者回家(我的意思是:回家。不要写糟糕的代码。我们不再需要了。)
由于它适用于该问题,这意味着问题完全与将字符串解析为 C# DateTime 值有关。将此数据移至 SQL 的下一步是不相关的。值得庆幸的是,.Net 为您提供了一些选择。具体来说,看一下 Parse 系列函数,包括:
DateTime.Parse()
DateTime.TryParse()
DateTime.ParseExact()
DateTime.TryParseExact()
后两者允许您指定一组允许的格式,这些格式可以与系统实际看到的格式相匹配。 NuGet 可以成为该领域的进一步资源。
你说那是什么?您想允许用户输入任何内容吗?那是行不通的。时期。真正的人类并且将会想出比你所能处理的更多的输入日期的方法。更不用说当英国公民在您的系统中输入值 1/2/2018 时您需要知道该怎么做,因为该人几乎肯定认为这意味着 2018 年 2 月 1 日,而不是 1 月 2 日像这样的文化差异意味着如果前端没有某种上下文输入过滤器,就不可能接受日期输入。您必须关注您的用户界面,以帮助您的用户创建您的代码能够理解的值...但我们在问题中没有足够的信息来提供该领域的任何指导。
关于c# - 将用户给定日期(2017 年 1 月或 2 月 1 日)转换为时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48650931/
在下面的代码中,我得到一个 uninitialized value警告,但仅限于第二个 given/when例子。为什么是这样? #!/usr/bin/env perl use warnings; u
整个“开关”功能是否已成为实验性的?在没有 Perl 的 future 版本破坏我的代码的情况下,我可以依赖其中的某些部分吗?一般来说,将稳定功能更改为实验性的政策是什么? 背景use feature
有没有办法在一个条件语句中写出如下语句? a和b不能同时等于5。 (a可以是5,b可以是5,但是a AND b不能是5) 最佳答案 正如克里斯指出的那样,您要查找的是逻辑异或,相当于逻辑不等于 !=:
我正在寻找一种算法来找到给定 n 条线段的所有交点。以下是来自 http://jeffe.cs.illinois.edu/teaching/373/notes/x06-sweepline.pdf 的伪
数组中有 N 个元素。我可以选择第一项最多 N 次,第二项最多选择 N-1 次,依此类推。 我有 K 个 token 要使用并且需要使用它们以便我可以拥有最大数量的项目。 arr = [3, 4, 8
我正在尝试修复法语文本中的语法性别,想知道是否有办法从某个词条中获取所有单词的列表,以及是否可以在此类列表中进行查找? 最佳答案 尝试: import spacy lemma_lookup = spa
我正在为 Win32 编写一个简单的自动化测试应用程序。它作为一个单独的进程运行,并通过 Windows API 访问目标应用程序。我可以阅读窗口层次结构,查找标签和文本框,并通过发送/发布消息等来单
在 nodeJs 中使用 Sequelize 时,我从 Sequelize 收到此错误,如下所示: { [SequelizeUniqueConstraintError: Validation erro
本文https://arxiv.org/pdf/1703.10757.pdf使用回归激活映射 (RAM) - 而不是类激活映射 (CAM) 来解决问题。有几篇文章描述了如何实现 CAM。但是我找不到
我正在研究 Mach 动态链接器 dyld。这个问题适用于所有 Apple 平台,但很高兴得到特定于平台的答案;我正在使用 ObjC,但如果对你有用的话,我也很乐意翻译 Swift。 The rele
我有一个包含数千个 Instagram 用户 ID 的列表。我如何获得他们的 Instagram 用户名/句柄? 最佳答案 你必须使用这个 Instagram API: https://api.ins
我在下面的代码: def main(args: Array[String]) { val sparkConf = new SparkConf().setAppName("Spark-Hbase").s
我有一个表格,其中包含从 1 到 10 的数字。(从 D2 到 M2) 假设A1中有03/09/2019 并且在B1中有06/09/2019 并且在C1中有Hello 在A 列中,我有多个系列的单词,
我想在给定服务对应的 URI 的情况下检索服务的注释(特别是 @RolesAllowed )。这是一个例子: 服务: @GET @Path("/example") @RolesAllowed({ "B
我看到 OraclePreparedStatementexecuteQuery() 表现出序列化。也就是说,我想使用相同的连接对 Oracle 数据库同时运行两个查询。然而,OraclePrepare
import java.util.Scanner; public class GeometricSumFromK { public static int geometricSum(int k,
我创建了一个抽象基类Page,它说明了如何构建动态网页。我正在尝试想出一种基于作为 HttpServletRequest 传入的 GET 请求生成 Page 的好方法。例如... public cla
我的字符串是一条短信,采用以下两种格式之一: 潜在客户短信: 您已收到 1 条线索 标题:我的领导 潜在客户 ID:12345-2365 警报设置 ID:890 短信回复: 您已收到 1 条回复 标题
我在 python 中有以下代码: class CreateMap: def changeme(listOne, lisrTwo, listThree, listFour, listfive):
这是在 Hibernate 上运行的 JPA2。 我想检索相同实体类型的多个实例,给定它们的 ID。其中许多已经在持久性上下文和/或二级缓存中。 我尝试了几种方法,但似乎都有其缺点: 当我使用 ent
我是一名优秀的程序员,十分优秀!