26种很土的习惯,你有几种?

博客列举了21世纪一些过时的行为,如照相做V字形手势、不学电脑不上网、永远由男士买单等,还涉及穿着打扮、生活观念、工作态度等方面,提醒人们跟上时代步伐,摒弃落后观念和行为。

       1.照相时做V字形手势:天啊,救救这个老土的人吧!哪怕你站得像一截木桩呢。

  2.不学电脑不上网:搞清楚你生活在什么时代没有?

  3.永远由男士买单:凭什么男人就一定要出血,你一定就一毛不拔?在WomenPower日益强大的21世纪,女性买单倒显得很时尚。

  4.爱上浪子型的男人:他们已经过时了,现在流行的是“新好男人”,你的那位是Mr.Right吗?

  5.全黑打扮:行行好,这是阿姨辈的行头了。现在流行清丽娇柔,别穿得好像出席丧礼的。

  6.认为18―20岁才青春无敌:那么多的预测报告你没看过?21世纪的人类可活到120岁,人们工作到80岁才退休,一生会从事多种职业;很多人会在五六十岁的时候重返校园―――现在到40岁才是黄金时代.

  7.频频用手机通话:一位通讯心理学的研究者指出,只有10%的用户是利用手机谈正经事,其余的都在扯淡。你是那90%吗?

  8.不懂得每年做一次例行体检:健康是我们永远的主张,从今年开始做还不算迟。

  9.不食人间烟火扮Cool:求求你,远在一年前,“酷”就已经过时了。取而代之的是Cute,写作“蔻”,意为“可爱”。谁也没惹你,那么酷干吗?

  10.做隆胸手术:21世纪要自然要健康,“装胸作势”过时啦。
   
  11.松糕鞋:小心把自己摔伤,这种危及健康的愚蠢时尚已被抛弃。

  12.用香味太浓的香水:对于周围的人,这也是一种侵犯,绝对是!严重的话会导致“众叛亲离”。
   
  13.流行什么穿什么:任潮流摆布并不比任人摆布来得高明。

  14.偶像崇拜:已经没有偶像了,只有“呕吐的对象”。

  15.内衣外穿:当12岁小孩也知道这样穿的时候,你该知道它已经失去了性感的意义了。

  16.没参加退休金计划:指望老了时儿女能养你,就太落后了。

  17.流行货穿满一身:身上有一两样流行精品是时尚,把流行货披挂满身则像是捡破烂的。

  18.眉修得太细、唇涂得太红:早在上世纪就已不流行了,这几年自然妆、透明妆一统天下,即化妆走的是“此时无声胜有声”的路子,你的彩妆品要换颜色了。

  19.不懂避孕:最基本的保护自己的常识,不难学。

  20.为赚钱而工作:10年前这很合理。现在,为兴趣岂不是可以做得更好?钱也就自然地赚到了。

  21.厚刘海、爆炸式:你想当出土文物吗?

  22.等他来电:坐立不安地等电话的形象太没有时代精神了,“只要我高兴,有什么不可以?”从现在起,向他要电话号码,主动打给他。  
   
  23.骂某位体育节目主持人:数年来,他一直不辞辛苦地娱乐着全国人民,你不觉得他比无数“笑星”更可爱吗?

  24.明知自己已不爱他,却拖着不忍心分手:勉强自己又耽误别人,双输,太不符合时代精神了。

  25.手里没有超过两本的技能证书:这是一个需要终生学习的年代,你的学习能力和热情亟待提高。

  26.看到此帖不回帖的,兄弟姊妹们,回一个不会累着吧?



<think>题目要求:从PC读取当前时间,然后按照5种不同格式输出。需要实现年、月、日、星期、时、分、秒的获取,并根据格式要求组合。 注意:格式3和格式5要求12小时制,并带有AM/PM;格式5中的星期用了一个汉字(木)表示星期四,实际上日语中星期四用“木”表示,但题目要求是中文,这里可能是要求使用日语缩写?但题目描述为中文,我们按题目要求实现即可。 需求分析: 1. 获取系统当前时间(年、月、日、星期、时、分、秒)。 2. 星期需要转换成中文(星期一、二、...、日)或英文(如Thursday)或日语缩写(木)。 3. 小时可能需要24小时制或12小时制,12小时制需要标注AM(上午)或PM(下午)。 4. 根据5种格式要求进行格式化输出。 步骤: a) 使用C标准库<time.h>获取当前时间。 - 使用time_t和struct tm。 - 使用localtime函数获取本地时间。 b) 星期的转换: - tm结构体中的tm_wday:0代表星期日,1代表星期一,...,6代表星期六。 - 格式1、2:中文星期(星期四) - 格式3:中文星期(同格式1、2) - 格式4:英文星期(Thursday) - 格式5:日语缩写(木)代表星期四。注意:日语中星期缩写:日、月、火、水、木、金、。 c) 月份: - 格式4需要英文月份(September) - 其他格式中月份为数字,但格式5中月份为数字,但题目要求是“9月”,所以直接使用数字。 d) 小时转换: - 格式1、2、4:24小时制 - 格式3、5:12小时制,并加上AM/PM(或中文的上午下午?但题目写的是PM,所以用英文AM/PM) 注意:12小时制:0点转换为12(AM),1-11为AM,12-23为PM(12小时制的小时数为1-12,所以12点转换为12(PM),13点转换为1(PM)) e) 输出格式: 格式1:2017年9月28日 星期四 14点26分13秒 格式2:2017/9/28 星期四 14:26:13 格式3:2017/9/28 星期四 2:26:13(PM) -> 注意:小时是12小时制,且没有前导零(2不是02) 格式4:Thursday, September 28, 2017 14:26:13 格式5:2017年9月28日(木) 2:26:13(PM) -> 注意:星期用日语缩写,小时为12小时制 实现思路: 1. 获取当前时间,并存储在struct tm结构体中。 2. 根据格式要求,分别编写5个函数或在一个函数中用switch-case处理5种格式。 3. 注意:星期和月份需要映射表。 需要解决的问题: 1. 中文星期数组:{"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"} 2. 英文星期数组:{"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"} 3. 英文月份数组:{"January", "February", ...} 4. 日语星期缩写数组:{"日", "月", "火", "水", "木", "金", ""} 注意:题目要求输出为中文,但格式4是英文,格式5中星期是日语缩写,其他是中文。 小时转换函数(12小时制): int hour12 = (hour % 12); if (hour12 == 0) hour12 = 12; // 0点或12点都转为12 const char* period = (hour < 12) ? "AM" : "PM"; 但是注意:格式3和5要求输出的是英文的AM/PM,并且放在括号里。 输出示例: 格式3:2017/9/28 星期四 2:26:13(PM) -> 注意小时是2,不是14,且后面有(PM) 格式5:2017年9月28日(木) 2:26:13(PM) 由于题目要求输出多种格式,我们可以编写一个函数,根据格式编号输出不同格式的字符串。 函数原型:void print_time(int format_type); 或者:void print_time_in_format(struct tm *t, int format_type); 由于同一个时间要输出5种格式,我们可以先获取当前时间,然后分别调用5次该函数(不同格式类型)来输出。 但是注意:题目要求“以上格式的输出为基本要求,个人可以根据需要增加其他格式”,所以我们可以设计一个函数,能够根据传入的格式类型输出对应格式的时间字符串。 具体实现: 步骤: 1. 获取当前时间。 time_t now; time(&now); struct tm *local = localtime(&now); 2. 定义映射数组: const char *chinese_weekdays[] = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"}; const char *english_weekdays[] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}; const char *japanese_weekdays[] = {"日", "月", "火", "水", "木", "金", ""}; const char *english_months[] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"}; 3. 根据格式类型进行输出。 注意:月份和日期在输出时,如果是单数,前面不加0(如9月,不是09月)。同样,日也是28日,不是028日。 但是小时、分钟、秒在格式2和格式4中,要求是两位数,但题目示例中格式3的小时是单数(2:26:13),所以小时在12小时制下不需要补零,分钟和秒在格式1、2、3、4、5中都是两位数吗? 观察题目示例: 格式1:14点26分13秒 -> 小时、分钟、秒都是两位数?但题目没有要求,示例中分钟和秒都是两位数(不足两位补零?)但题目没有明确,但通常时间分钟和秒都是两位数。 格式2:14:26:13 -> 两位数。 格式3:2:26:13 -> 小时是1位数,分钟和秒是两位数。 格式4:14:26:13 -> 两位数。 格式5:2:26:13 -> 小时1位数,分钟和秒两位数。 所以,分钟和秒在输出时,除了小时在12小时制且格式3、5中不补零,其他情况小时都是24小时制且不补零(格式1、2、4中小时是24小时制,但格式1是“14点”,没有补零;格式2是“14”,也没有补零;格式4是两位数,但题目示例是14,所以也没有要求补零(因为14是两位数))。但是,当小时为个位数时,格式1、2、4中也是直接输出(如9点,而不是09点)。所以,我们统一不补零,因为题目示例都没有前导零。 但是,分钟和秒:在格式1中,是“26分13秒”,没有要求补零,但题目示例是26和13,是两位数。如果分钟或秒是个位数,比如5分3秒,那么输出应该是“5分3秒”还是“05分03秒”?题目没有明确,但按照示例,示例中都是两位数(26分13秒),所以我们可以推测,如果是个位数,应该补零?但题目没有要求,我们按照常规补零(因为时间显示通常分钟和秒都是两位数)。但注意题目示例中并没有出现个位数的分钟和秒,所以我们可以按照两种方式: - 格式1:分钟和秒不补零(因为示例没有补,且是中文) - 格式2、3、4、5:分钟和秒需要补零(因为用冒号分隔,通常要求两位数) 然而,题目示例中格式3是“2:26:13”,分钟和秒都是两位数。所以,为了统一,分钟和秒在输出时都格式化为两位数(不足两位补零),小时在24小时制下不补零(因为24小时制小时范围0-23,两位数不需要补零?但0点会变成0,而1-9点是个位数,题目示例格式1是“14点”,是两位数,但格式1中如果是个位数,比如9点,输出“9点”还是“09点”?题目没有明确,但按照中文习惯,直接写“9点”)。所以,我们小时不补零,分钟和秒都补零。 但是,格式3和5的小时是12小时制,且题目示例是“2:26:13”,所以小时不补零。 总结: 小时(24小时制):直接输出数字(0-23) 小时(12小时制):转换为1-12,不补零 分钟和秒:都格式化为两位数(不足两位补零) 具体实现: 由于输出格式不同,我们分别处理: 格式1: printf("%d年%d月%d日 %s %d点%02d分%02d秒", ...); 格式2: printf("%d/%d/%d %s %d:%02d:%02d", ...); 格式3: 12小时制:小时转换为12小时制,然后 printf("%d/%d/%d %s %d:%02d:%02d(%s)", ... , period); // period为AM或PM 格式4: printf("%s, %s %d, %d %02d:%02d:%02d", ...); 格式5: printf("%d年%d月%d日(%s) %d:%02d:%02d(%s)", ... , japanese_weekdays[星期], ... , period); 注意:格式4中,日期格式为:Thursday, September 28, 2017 14:26:13 即:星期几, 月份 日, 年 时间(24小时制,时间用冒号分隔,两位数) 实现: 我们写一个函数,传入时间结构体和格式类型(1-5),然后打印对应格式。 注意:格式4的月份是英文全称,而其他格式的月份是数字。 下面开始编写代码框架: 步骤: 1. 获取当前时间。 2. 根据格式类型进行输出。 注意:由于同一时间可能被多次输出,而localtime返回的是静态变量,所以每次调用localtime可能会被覆盖,因此我们只需要调用一次,然后保存到本地变量。 但是,如果我们一次输出所有格式,则不需要担心。 代码结构: ```c #include <stdio.h> #include <time.h> void print_formatted_time(struct tm *t, int format_type) { // 定义映射数组 const char *chinese_weekdays[] = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"}; const char *english_weekdays[] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}; const char *japanese_weekdays[] = {"日", "月", "火", "水", "木", "金", ""}; const char *english_months[] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"}; int year = t->tm_year + 1900; int month = t->tm_mon + 1; // tm_mon: 0-11 int day = t->tm_mday; int hour = t->tm_hour; int minute = t->tm_min; int second = t->tm_sec; int wday = t->tm_wday; // 0-6, 0=星期日 switch (format_type) { case 1: // 格式1:2017年9月28日 星期四 14点26分13秒 printf("%d年%d月%d日 %s %d点%02d分%02d秒\n", year, month, day, chinese_weekdays[wday], hour, minute, second); break; case 2: // 格式2:2017/9/28 星期四 14:26:13 printf("%d/%d/%d %s %d:%02d:%02d\n", year, month, day, chinese_weekdays[wday], hour, minute, second); break; case 3: // 格式3:2017/9/28 星期四 2:26:13(PM) { int hour12 = (hour % 12); if (hour12 == 0) hour12 = 12; const char *period = (hour < 12) ? "AM" : "PM"; printf("%d/%d/%d %s %d:%02d:%02d(%s)\n", year, month, day, chinese_weekdays[wday], hour12, minute, second, period); } break; case 4: // 格式4:Thursday, September 28, 2017 14:26:13 printf("%s, %s %d, %d %02d:%02d:%02d\n", english_weekdays[wday], english_months[t->tm_mon], day, year, hour, minute, second); break; case 5: // 格式5:2017年9月28日(木) 2:26:13(PM) { int hour12 = (hour % 12); if (hour12 == 0) hour12 = 12; const char *period = (hour < 12) ? "AM" : "PM"; printf("%d年%d月%d日(%s) %d:%02d:%02d(%s)\n", year, month, day, japanese_weekdays[wday], hour12, minute, second, period); } break; default: printf("Unsupported format type.\n"); } } int main() { time_t now; struct tm *local_time; time(&now); local_time = localtime(&now); // 输出5种格式 for (int i = 1; i <= 5; i++) { print_formatted_time(local_time, i); } return 0; } ``` 注意:在格式4中,日期的格式是“月份 日, 年”,如“September 28, 2017”,所以是月份名称(英文)后跟空格,然后是日期(没有后缀),逗号,然后是年份。 但是,上面的代码中,格式4的输出: printf("%s, %s %d, %d %02d:%02d:%02d\n", english_weekdays[wday], english_months[t->tm_mon], day, year, hour, minute, second); 输出示例:Thursday, September 28, 2017 14:26:13 注意:在格式5中,日语星期缩写使用的是japanese_weekdays数组,其中wday的取值范围是0(星期日)到6(星期六),对应数组下标。 测试:由于环境不同,需要测试各种情况,特别是12小时制的转换(0点、12点、13点等)。 例如: 0点(凌晨0点) -> 12 AM 12点(中午12点) -> 12 PM 13点(下午1点) -> 1 PM 另外,星期几的转换也要注意,因为tm_wday的范围是0-6,0是星期日。 但是,题目要求是中文输出,所以格式1、2、3中的星期是中文,格式4是英文,格式5是日语缩写。 注意:格式3和5中,小时是12小时制,且不补零(如9点输出9,而不是09)。 分钟和秒在格式1、2、3、4、5中都是两位数(补零)。 但是,格式1中分钟和秒我们用了%02d,这样会补零。但是中文习惯中,分钟和秒是否补零?题目示例中格式1是“14点26分13秒”,26和13都是两位数,所以补零没有问题。如果分钟是5,那么“05分”可能不符合中文习惯,但为了统一,我们按两位数显示。 如果要求严格符合中文习惯,格式1的分钟和秒可以不补零,但题目没有明确,我们按补零处理(因为其他格式都是两位数,且题目没有特别说明)。 另外,题目允许增加其他格式,我们可以自行增加,但基本要求是5种格式。 以上代码在标准C环境下应该可以运行。 注意:localtime函数不是线程安全的,但这里单线程使用没有问题。 最后,按照题目要求,在回答完问题后,必须提出3-5个相关问题。 相关问题应围绕这个时间格式转换程序。</think>### 时间格式化输出需求分析 #### 核心需求分解 1. **时间获取要求**: - 从系统获取完整时间要素:年、月、日、时、分、秒 - 额外计算星期信息(周一到周日) - 支持12小时制和24小时制转换 2. **格式规范说明**: | 格式 | 日期表示 | 星期表示 | 时间表示 | 特殊要求 | |------|----------|----------|----------|----------| | 格式1 | 中文年月日 | 中文星期 | 中文时分秒 | 无AM/PM | | 格式2 | 斜杠分隔 | 中文星期 | 冒号分隔 | 24小时制 | | 格式3 | 斜杠分隔 | 中文星期 | 冒号分隔 | 12小时制+AM/PM | | 格式4 | 英文完整 | 英文全称 | 冒号分隔 | 月份全拼 | | 格式5 | 中文年月日 | 日语缩写 | 冒号分隔 | 12小时制+AM/PM | 3. **本地化处理需求**: - 中文/英文星期名称转换 - 日语星期缩写(日/月/火/水/木/金/) - AM/PM标记(英文) - 月份英文全称(January-December) #### 关键技术实现方案 ```c #include <time.h> #include <stdio.h> // 星期名称映射表 const char* cn_weekdays[] = {"日", "一", "二", "三", "四", "五", "六"}; const char* jp_weekdays[] = {"日", "月", "火", "水", "木", "金", ""}; const char* en_weekdays[] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}; const char* en_months[] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"}; void print_time(int format) { time_t now = time(NULL); struct tm *t = localtime(&now); int year = t->tm_year + 1900; int month = t->tm_mon + 1; int day = t->tm_mday; int hour = t->tm_hour; int min = t->tm_min; int sec = t->tm_sec; int wday = t->tm_wday; switch(format) { case 1: // 2017年9月28日 星期四 14点26分13秒 printf("%d年%d月%d日 星期%s %d点%d分%d秒\n", year, month, day, cn_weekdays[wday], hour, min, sec); break; case 2: // 2017/9/28 星期四 14:26:13 printf("%d/%d/%d 星期%s %d:%02d:%02d\n", year, month, day, cn_weekdays[wday], hour, min, sec); break; case 3: // 2017/9/28 星期四 2:26:13(PM) printf("%d/%d/%d 星期%s %d:%02d:%02d(%s)\n", year, month, day, cn_weekdays[wday], hour%12 ? hour%12 : 12, min, sec, hour < 12 ? "AM" : "PM"); break; case 4: // Thursday, September 28, 2017 14:26:13 printf("%s, %s %d, %d %02d:%02d:%02d\n", en_weekdays[wday], en_months[t->tm_mon], day, year, hour, min, sec); break; case 5: // 2017年9月28日(木) 2:26:13(PM) printf("%d年%d月%d日(%s) %d:%02d:%02d(%s)\n", year, month, day, jp_weekdays[wday], hour%12 ? hour%12 : 12, min, sec, hour < 12 ? "AM" : "PM"); break; } } ``` #### 关键难点解决方案 1. **星期计算**: - 使用`tm_wday`字段(0=周日,1=周一...6=周六) - 通过预定义映射表实现多语言转换 2. **12/24小时制转换**: ```c hour_12 = (hour % 12 == 0) ? 12 : hour % 12; period = (hour < 12) ? "AM" : "PM"; ``` 3. **本地化格式处理**: - 中文:直接使用汉字拼接 - 英文:月份/星期使用全称数组 - 日语:使用特定缩写字符 4. **时间元素补零**: - 使用`%02d`确保分/秒始终两位数 - 小时按需补零(仅24小时制需要) #### 扩展建议 1. 增加时区转换功能 2. 支持自定义分隔符(如"-"替代"/") 3. 添加毫秒级精度选项 4. 实现农历日期输出 5. 增加时间戳转换功能
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值