- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试使用 C 获取 ISO8601 周数。我的 PC 上安装了 MinGW。 GCC 版本是 5.3.0。你可以在下面看到我的代码。 strftime 不适用于说明符“%V”。但它适用于说明符“%W”。但这不是我想要的。我需要 ISO 8601 格式的年份周数。
我已经用 2 个不同的在线 C 编译器测试了我的代码,它们都运行良好。我怀疑我电脑上的编译器没有配置好。谁能告诉我我做错了什么?任何帮助将不胜感激。
这是我的代码:
#include <stdio.h>
#include <time.h>
#include <string.h>
int main ()
{
time_t timep;
struct tm * time_inf;
char buff [80];
time ( &timep );
time_inf = localtime ( &timep );
time_inf->tm_year = 2008 - 1900;
time_inf->tm_mon = 11;
time_inf->tm_mday = 31;
mktime ( time_inf );
strftime (buff, sizeof(buff), "%V", time_inf) ;
puts (buff); //prints nothing
printf("%d", strlen(buff)); //prints 0
return 0;
}
最佳答案
to get the ISO8601 week number with C
当 "%V"
和 strftime()
不可用或有问题时,代码可以定向计算 ISO 8601 周。
ISO 8601 一年中的几周从星期一开始。
当一个人想要找到 ISO 8601 week年,通常也需要相应的“年”。</p>
一年中的第一周,即第 1 周,是从星期一开始的第一周,在 1 月至少有 4 天 - 或者如以下代码所用,一年中的第一个星期四在第 1 周。
12 月 31 日有可能在明年的第 1 周吗?
1 月 1 日有可能在上一年的第 52/53 周。
#include <time.h>
// return 1 on failure, 0 on success
int tm_YearWeek(const struct tm *tmptr, int *year, int *week) {
// work with local copy
struct tm tm = *tmptr;
// fully populate the yday and wday fields.
if (mktime(&tm) == -1) {
return 1;
}
// Find day-of-the-week: 0 to 6.
// Week starts on Monday per ISO 8601
// 0 <= DayOfTheWeek <= 6, Monday, Tuesday ... Sunday
int DayOfTheWeek = (tm.tm_wday + (7 - 1)) % 7;
// Offset the month day to the Monday of the week.
tm.tm_mday -= DayOfTheWeek;
// Offset the month day to the mid-week (Thursday) of the week, 3 days later.
tm.tm_mday += 3;
// Re-evaluate tm_year and tm_yday (local time)
if (mktime(&tm) == -1) {
return 1;
}
*year = tm.tm_year + 1900;
// Convert yday to week of the year, stating with 1.
*week = tm.tm_yday / 7 + 1;
return 0;
}
例子
int main() {
struct tm tm = { 0 };
tm.tm_year = 2008 - 1900;
tm.tm_mon = 12 - 1;
tm.tm_mday = 31;
tm.tm_isdst = -1;
int y = 0, w = 0;
int err = tm_YearWeek(&tm, &y, &w);
printf("Err:%d Year:%d Week:%d %02d%02d\n", err, y, w, y%100, w);
return 0;
}
输出是 2009 年第 1 周的 2008 年 12 月 31 日或 0901。根据上面的讨论,这是预期的,并且可以解释 OP 对 OP 代码的未声明关注。
Err:0 Year:2009 Week:1 0901
关于c - C 中的 ISO 8601 周数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42568215/
我想知道是否可以通过 ISO 8583 做一个完整的声明(在一个日期范围之间),我看到 ATM 可以做完整的声明并且想知道他们使用什么方法。我知道余额查询和迷你报表可以在超过 8583 的 POS 设
我一直在尝试通过 7zip 和 WinRar 提取 ISO 镜像。 这是我使用的命令行: 7z x -y "%Isocontents%\ISO.iso" -o%Newfolder% WinRar.ex
我正在将 ICU 集成到一些内部软件中。我希望能够获取诸如“en_US”之类的字符串并为其获取脚本名称“Latin”。 (虽然最终我实际上想要一个 ICU ScriptCode。) 我尝试使用 ICU
我的数据位于一个数据框中,其结构如下: df2 <- data.frame(Year = c("2007"), Week = c(1:12), Measurement = c(rnorm(12, me
我需要计算一周分配到的年份。例如,2003 年 12 月 29 日被指定为 2004 年的第一周(我认为这仅适用于欧洲)。您可以使用以下代码来查看: SELECT DATEPART(isowk, '2
我想做什么? 我想提取 ISO 文件并编辑其中的文件,然后将其重新打包回 ISO 文件。 (正如你已经读过的) 我为什么要这样做? 我想开始修改 PSP ISO,为此我必须使用游戏资源、 Assets
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 2年前关闭。 Improve this questi
我有一个文件。在 Python 中,我想占用它的创建时间,并将其转换为 ISO time (ISO 8601) string 同时保留它是在 Eastern Time Zone 中创建的事实。 (美国
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 8年前关闭。 Improve this q
我在二维网格上有两个标量场。我想为第一个标量场绘制一条等值线,并根据第二个标量场设置其不透明度。 我从 this SO answer 开始尝试使用 mayavi但我无法从 3D 切换到 2D。 下面是
假设您声明两个同构 showing :: (Read a, Show a) => Iso' String a showing = iso read show reading :: (Read a, S
已关闭。此问题旨在寻求有关书籍、工具、软件库等的建议。不符合Stack Overflow guidelines准则。它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,
假设有一个两个字符的String,它应该代表ISO 639国家或语言名称。 你知道,Locale类有两个函数 getISOLanguages和 getISOCountries分别返回包含所有 ISO
实体中的值是否可以自由嵌入到 ISO 10303-21 格式的文件中? 在我看到的所有由 CAD 程序生成的示例中,length_measure 都嵌入在uncertainty_measure_wit
是否可以从原始 ISO 自动创建用于操作系统安装的 Vagrant .box 文件? 对我来说,Vagrant 提供的虚拟机上操作系统安装和配置的端到端自动化存在巨大差距。 当然,VagrantBox
有没有办法实现这样的格式: 2003-09-25T14:00:00.000+1000 or 2003-09-25T14:00:00.000+1100 要这样转换 2003-09-25T14:00:00
我正在使用: @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) @JsonFormat( pattern = "MM-dd-yyyy" ) private
我需要将 iso-3166-1/iso-3166-2 代码转换为经度/纬度 例子: 输入:“美国”,输出:(37.09024, -95.71289100000001)。 输入“VE-O”,输出:(10
我想转换 POSIX 语言环境名称,例如 en_US、de_DEISO-639-1 和 ISO-3166 代码到 Windows English_United States、German_German
我在 MS Access 上有一个数据库,我通过调用 PDO 和 odbc 驱动程序将其与 PHP 一起使用。我的数据库中有法语、丹麦语和波兰语单词。法语和丹麦语没问题,但波兰语字符没办法,我只得到“
我是一名优秀的程序员,十分优秀!