我正在运行Python 3.8.3,并且发现有关ISO Week格式(%V)的一些奇怪信息:
2019年的第一天和最后一天都在第1周中。
from datetime import date
print(date(2019, 1, 1).strftime('%Y-W%V'))
print(date(2019, 12, 29).strftime('%Y-W%V'))
print(date(2019, 12, 31).strftime('%Y-W%V'))
输出:
2019-W01
2019-W52
2019-W01
为什么会这样?
答案 0 :(得分:4)
完全正确。
您在约会中看到的所有日期都在Declare @intv int=5;
WITH cte AS (
SELECT
CONVERT(NVARCHAR(20),DATEANDTIME,113) DATETIME
, ALARM
, F870 'COLD JUICE PRE [PSI]'
, F872 'COLD WATER PRE [PSI]'
, F82 'FILLER TEMP [DEGC]'
, F810 'FLOW [LTR/MIN]'
, F869 'HOT JUICE PRE[PSI]'
, F874 'HOT WATER PRE[PSI]'
, F867 'HOT WATER TEMP[DEGC]'
, F84 'JUICE TEMP AFTER HOLD TUBE[DEGC]'
, F822 'PD FOR COLD PHE[PSI]'
, F821 'PD FOR HOT PHE[PSI]'
, F8X 'PHE INLET TEMP[DEGC]'
, B1 'MACHINE 1 STATUS'
, B2 'MACHINE 2 STATUS'
, DATEANDTIME
, ROW_NUMBER() OVER(PARTITION BY DATEADD(minute, (DATEDIFF(minute, (SELECT MIN(dateAndtime) FROM DATALOGTABLE WHERE dateAndTime >= @FROMDATETIME AND dateAndTime <= @TODATETIME), dateAndtime)/@intv*@intv), (SELECT MIN(dateAndtime) FROM DATALOGTABLE WHERE dateAndTime >= @FROMDATETIME AND dateAndTime <= @TODATETIME)) ORDER BY dateAndtime) AS RowNum
FROM (
SELECT DATEANDTIME,
NULL ALARM, F870 F870, F872 F872, F82 F82, F810 F810, F869 F869, F874 F874, F867 F867, F84 F84, F822 F822, F821 F821, F8X F8X, CASE WHEN B1=1 THEN 'ON' ELSE 'OFF' END B1, CASE WHEN B2=1 THEN 'ON' ELSE 'OFF' END B2
FROM DATALOGTABLE WITH (NOLOCK) WHERE (CONVERT(DATE,DATEANDTIME,103)>=CONVERT(DATE,@FROMDATETIME,103) AND CONVERT(DATE,DATEANDTIME,103)<=CONVERT(DATE,@TODATETIME,103))
AND (((DATEPART(minute,dateandtime)%@intv)=0) and (DATEPART(SECOND,dateandtime)>58))
UNION ALL
SELECT DATEANDTIME, ALARMTXT ALARM,
NULL F870, NULL F872, NULL F82, NULL F810, NULL F869, NULL F874, NULL F867, NULL F84,
NULL F822, NULL F821, NULL F8X, NULL B1, NULL B2
FROM DBO.ALARMHISTORY WITH (NOLOCK) WHERE (CONVERT(DATE,DATEANDTIME,103)>=CONVERT(DATE,@FROMDATETIME,103) AND CONVERT(DATE,DATEANDTIME,103)<=CONVERT(DATE,@TODATETIME,103))
AND (((DATEPART(minute,dateandtime)%@intv)=0) and (DATEPART(SECOND,dateandtime)>58))
) Z
)
SELECT
"DATETIME"
, "ALARM"
, "COLD JUICE PRE [PSI]"
, "COLD WATER PRE [PSI]"
, "FILLER TEMP [DEGC]"
, "FLOW [LTR/MIN]"
, "HOT JUICE PRE[PSI]"
, "HOT WATER PRE[PSI]"
, "HOT WATER TEMP[DEGC]"
, "JUICE TEMP AFTER HOLD TUBE[DEGC]"
, "PD FOR COLD PHE[PSI]"
, "PD FOR HOT PHE[PSI]"
, "PHE INLET TEMP[DEGC]"
, "MACHINE 1 STATUS"
, "MACHINE 2 STATUS"
WHERE RowNum = 1
ORDER BY DATEANDTIME DESC;
中,因此使用2019
获得2019年是正确的。
周号是由ISO定义的,因此可以考虑在上一年或明年的一周。
您需要使用%Y
来获取星期几(%G
)。