我很难找到一种方法来解析时区,如下所示:"星期四,2011年9月1日09:06:03 -0400(美国东部时间)"
我需要在我的程序的更大方案中做的是接受char*并将其转换为time_t.以下是我编写的一个简单的测试程序,试图找出strptime是否完全考虑时区,并且它似乎不是(当这个测试程序执行时,所有打印的数字在它们应该不同时是相同的).建议?
我也尝试使用GNU getdate和getdate_r,因为对于可能灵活的格式来说,这似乎是一个更好的选择,但是我从编译器得到了一个"隐式函数声明"警告,暗示我没有包含正确的库.还有其他我应该#include使用getdate吗?
#include <string.h>
#include <stdlib.h>
#include <strings.h>
#include <stdio.h>
#ifndef __USE_XOPEN
#define __USE_XOPEN
#endif
#include <time.h>
int main (int argc, char** argv){
char *timestr1, *timestr2, *timestr3;
struct tm time1, time2, time3;
time_t timestamp1, timestamp2, timestamp3;
timestr1 = "Thu, 1 Sep 2011 09:06:03 -0400 (EDT)"; // -4, and with timezone name
timestr2 = "Thu, 1 Sep 2011 09:06:03 -0000"; // -0
strptime(timestr1, "%a, %d %b %Y %H:%M:%S %Z", &time1); //includes UTC offset
strptime(timestr2, "%a, %d %b %Y …
Run Code Online (Sandbox Code Playgroud) 我每个月的第4天和第14天安排一个脚本.
当脚本在4号开始时,我需要获取上个月的最后一天(简单,$ a.AddDays(-5))
当脚本在14日开始时,我需要获得2个月前的最后一天.
例如:
14 april.
I want to get:28 february 2013
Run Code Online (Sandbox Code Playgroud)
这怎么可能?我也希望以格式yyyymmdd获取日期
UDPDATE:
您的解决方案是否可能无法适应当年的变化?
如果我在1月,$(获取日期).month -1结果0.所以我这样做:
$datenow = Get-date
if $datenow.day -eq 14
$datenow.AddDays(-14)
Run Code Online (Sandbox Code Playgroud)
然后我计算
$LastDayInMonth = [System.DateTime]::DaysInMonth($(Get-date).Year, $(Get-date.Month))
$datenow.AddDays(-$LastDayInMonth)
$datestring = $datenow.ToString("yyyyMMdd")
Run Code Online (Sandbox Code Playgroud) 我需要返回日期大于30天但小于90天的记录。因此,如果有人在31天前或89天前购买了某些商品,那么我需要返回这些行,而忽略了过去30天以及90天之外的任何东西。
我使用查询的这一部分为添加行的日期和时间创建表列:
order_date datetime NOT NULL DEFAULT GETDATE()
并且每当创建新行时,数据for order_date
设置为如下所示:
Apr 8 2014 9:52AM
出于某种原因,当创建行并设置order_date
列数据时,小时设置为1小时.例如,上面的列数据Apr 8 2014 9:52AM
设置为10:52 AM.
有没有办法提前1小时设置它,以便我的当前时间是正确的?
感谢您的任何帮助.非常感谢所有帮助.
我有一个订单表,其中包含订单ID,订单日期和订单描述.
我想运行一个选择查询,该查询捕获过去两天内创建的所有订单.所以当前日期减去两天.从12月14日起,我想选择订单日期> 12月13日的所有订单.这需要使用获取日期功能来获取当前日期并减去天数.
我试过了:
select * from orders where orderdate > getdate() - 2
Run Code Online (Sandbox Code Playgroud)
但这并没有产生正确的结果.请问有什么想法吗?
我不明白为什么DATENAME(GETDATE())给出了与DATENAME(2019-02-01)不同的结果当那是今天的日期
SELECT GETDATE(), DATENAME(w, GETDATE()),DATENAME(dw, 2019-02-01)
Run Code Online (Sandbox Code Playgroud)
返回:
2019-02-01 14:51:46.017 Friday Monday<br>
Run Code Online (Sandbox Code Playgroud)
虽然我希望它能回归:
2019-02-01 14:51:46.017 Friday Firday
Run Code Online (Sandbox Code Playgroud) 我试图将我返回的数据限制为仅包含当前月份中的开始日期和结束日期的那些点 - 活动项目.它的行为有问题,因为今天是这个月的最后一天.我相信明天也会出现问题(样本中没有6月的数据).
这是我的数据集(表1):
Project User Effort Start_Date End_Date
------- ------- ------ -------- --------
Traffic Control DOMAIN\john.smith 0.1 5/1/2013 5/31/2013
Turboencabulator Analysis DOMAIN\mark.webber 0 5/1/2013 5/31/2013
Widget Calibration DOMAIN\mark.webber 0 5/1/2013 5/31/2013
Gizmo Creation DOMAIN\steve.green 0.1 5/1/2013 5/31/2013
Advanced Toolmaking DOMAIN\steve.green 0.6 5/1/2013 5/31/2013
Diesel Engine Diagnostics DOMAIN\steve.green 0.05 5/1/2013 5/31/2013
Cold Fusion Reactor Creation DOMAIN\steve.green 0.3 5/1/2013 5/31/2013
Run Code Online (Sandbox Code Playgroud)
今天使用以下查询时,我没有返回结果:
SELECT * FROM dbo.table1
WHERE Start_Date <= (getdate()) AND End_Date >= (getdate())
ORDER BY User, Start_Date
Run Code Online (Sandbox Code Playgroud)
昨天回来很好.我也有六月的数据(没有在我的样本中显示)但我需要修改我的声明,以便它可以在整个月中可靠地返回当月的数据.
答案 - 纠正WHERE陈述(来自下面的答案中的评论): …
我在使用时遇到问题GetDate()
,由于某种原因没有返回正确的时间(比实际时间提前7小时)我正在使用AZURE
并且数据库配置了正确的位置(美国西部).我将不胜感激任何帮助!
我试着运行这个脚本:
SELECT id,
status,
AcceptedDate,
Getdate(),
Datediff(hour, AcceptedDate, Getdate())
FROM orderoffers
WHERE status = 'Accepted'
Run Code Online (Sandbox Code Playgroud) 我进行了搜索,但无法找到获取此格式的日期的方法 (DD.MM.YYYY) 请帮助我更改此请求:
DECLARE @date datetime
set @date = '01.05.2016'
SELECT [User], cast(DATEADD(SECOND, sum(datediff(DAY, @date,[Start])),@date) as date)'Date'
,cast(DATEADD(SECOND, sum(datediff(SECOND, '00:00:00',[Period])),'00:00:00') as time)'Total time'
FROM [Table].[TableAction]
where
[Start] >= @date+'00:00:00' and [Start] <= @date+'23:59:59'
group by [USER]
Run Code Online (Sandbox Code Playgroud)