首页 > 专题系列 > Java解POJ > POJ 3751 时间日期格式转换 [解题报告] Java
2013
11-13

POJ 3751 时间日期格式转换 [解题报告] Java

时间日期格式转换

问题描述 :

世界各地有多种格式来表示日期和时间。对于日期的常用格式,在中国常采用格式的是“年年年年/月月/日日”或写为英语缩略表示的”yyyy/mm/dd”,此次编程大赛的启动日期“2009/11/07”就是符合这种格式的一个日期,而北美所用的日期格式则为“月月/日日/年年年年”或”mm/dd/yyyy”,如将“2009/11/07”改成这种格式,对应的则是”11/07/2009”。对于时间的格式,则常有12小时制和24小时制的表示方法,24小时制用0-24来表示一天中的24小时,而12小时制只采用1-12表示小时,再加上am/pm来表示上午或下午,比如”17:30:00”是采用24小时制来表示时间,而对应的12小时制的表示方法是”05:30:00pm”。注意12:00:00pm表示中午12点,而12:00:00am表示凌晨12点。

对于给定的采用”yyyy/mm/dd”加24小时制(用短横线”-”连接)来表示日期和时间的字符串,请编程实现将其转换成”mm/dd/yyyy”加12小时制格式的字符串。

输入:

第一行为一个整数T(T<=10),代表总共需要转换的时间日期字符串的数目。

接下来的总共T行,每行都是一个需要转换的时间日期字符串。

输出:

分行输出转换之后的结果

样例输入:

2
2009/11/07-12:12:12
1970/01/01-00:01:01

样例输出:

11/07/2009-12:12:12pm
01/01/1970-12:01:01am

温馨提示:

注意中午和凌晨时间的特殊表示

解题代码:

import java.io.BufferedInputStream;   
import java.text.ParseException;   
import java.text.SimpleDateFormat;   
import java.util.Locale;   
import java.util.Scanner;   
import java.util.logging.Level;   
import java.util.logging.Logger;   
  
/*  
 * To change this template, choose Tools | Templates  
 * and open the template in the editor.  
 */  
/**  
 *  
 * poj3751 easy  
 *  
 * API里的  
 * 字母  日期或时间元素  表示  示例  
 *G  Era 标志符  Text  AD  
 *y  年  Year  1996; 96  
 *M  年中的月份  Month  July; Jul; 07  
 *w  年中的周数  Number  27  
 *W  月份中的周数  Number  2  
 *D  年中的天数  Number  189  
 *d  月份中的天数  Number  10  
 *F  月份中的星期  Number  2  
 *E  星期中的天数  Text  Tuesday; Tue  
 *a  Am/pm 标记  Text  PM  
 *H  一天中的小时数(0-23)  Number  0  
 *k  一天中的小时数(1-24)  Number  24  
 *K  am/pm 中的小时数(0-11)  Number  0  
 *h  am/pm 中的小时数(1-12)  Number  12  
 *m  小时中的分钟数  Number  30  
 *s  分钟中的秒数  Number  55  
 *S  毫秒数  Number  978  
 *z  时区  General time zone  Pacific Standard Time; PST; GMT-08:00  
 *Z  时区  RFC 822 time zone  -0800  
 * @author NC  
 */  
public class Main {   
  
    public static void main(String[] args) {   
        Scanner scanner = new Scanner(new BufferedInputStream(System.in));   
        int n = Integer.parseInt(scanner.nextLine());   
        //DateFormat 是一个抽象类来的   
        SimpleDateFormat df1 =   
                new SimpleDateFormat("yyyy/MM/dd-HH:mm:ss", Locale.US);   
        //二十四小时制   
        SimpleDateFormat df2 =   
                new SimpleDateFormat("MM/dd/yyyy-hh:mm:ssa", Locale.US);   
        //十二小时制,12:01凌晨是十二点多   
        //系统默认是上午或下午,而不是am或pm   
        for (int i = 0; i < n; i++) {   
            try {   
                String s = scanner.nextLine();   
                //先把字符串解析为日期,再格式化日期,转成字符串,最后再转小写   
                System.out.println(df2.format(df1.parse(s)).toLowerCase());   
            } catch (ParseException ex) {   
                  
            }   
        }   
    }   
}

  1. #include <cstdio>

    int main() {
    //answer must be odd
    int n, u, d;
    while(scanf("%d%d%d",&n,&u,&d)==3 && n>0) {
    if(n<=u) { puts("1"); continue; }
    n-=u; u-=d; n+=u-1; n/=u;
    n<<=1, ++n;
    printf("%dn",n);
    }
    return 0;
    }

  2. 有两个重复的话结果是正确的,但解法不够严谨,后面重复的覆盖掉前面的,由于题目数据限制也比较严,所以能提交通过。已更新算法