如何将24小时时间字符串转换为标准java日期,反之亦然?

如何将24小时时间字符串转换为标准java日期,反之亦然?,java,date,time,Java,Date,Time,我想有两个功能: 假设我在字符串中有日期“11/12/2011”,在字符串中有时间:“0200”。我想要一个简单的函数(如果可能的话),它在java中接受两个参数(上面的日期和时间),在javadate对象中将其转换为2011年12月11日凌晨2:00 假设我有一个javaDate对象作为返回军事时间的唯一参数(例如11/12/2011 2:00AM)(例如“0200”) 是否有一些java库,或者实现上述功能的最佳方法是什么?或者java Date中是否内置了一些东西,可以让您在军事时间轻松获

我想有两个功能:

  • 假设我在字符串中有日期
    “11/12/2011”
    ,在字符串中有时间:
    “0200”
    。我想要一个简单的函数(如果可能的话),它在java中接受两个参数(上面的日期和时间),在java
    date
    对象中将其转换为2011年12月11日凌晨2:00

  • 假设我有一个java
    Date
    对象作为返回军事时间的唯一参数(例如11/12/2011 2:00AM)(例如“0200”)

  • 是否有一些java库,或者实现上述功能的最佳方法是什么?或者java Date中是否内置了一些东西,可以让您在军事时间轻松获取java Date使用的正常时间?

    您可以使用适当的格式字符串。

    试试JodaTime

    (假设美国军方仍然将月份放在日期的第一位)

    [编辑:您也需要担心您的时区-对于解析,通常最简单的方法是简单地附加此项。例如:

    new SimpleDateFormat("MM/dd/yyyy HHmm Z").parse("11/12/2011" + " " + "0200" + " PST");
    
    (可能军方总是使用UTC?我不知道…)。至于格式化,您可以使用setTimezone()在SDF实例上设置时区。]

    我就是这样做的

    public static String militaryToOrdinaryTime(int milTime)
        {
           int hour = milTime / 100;
           int min = milTime % 100;
           String period;
    
           if (hour < 0 || hour > 24 || min < 0 || min > 59)
           {
               return "";
           }
           else if (hour > 12)
           {
               hour = hour - 12;
               period = "pm";
           }
           else
           {
               period = "am";
           }
           if (hour == 0)
           {
               hour = 12;
           }
           else if (min == 0)
           {
               String ordTime = hour + " " + period;
               return ordTime;
           }  
           else if (min < 10 && min > 0)
           {
              String min1 = String.valueOf(min);
    min1 = "0" + min1;
    String ordTime = hour + ":" + min1 + " " + period;
    return ordTime;
           }
           String ordTime = hour + ":" + min + " " + period;
           return ordTime;
        }
    
        public static void main(String[] args)
        {
            Scanner in = new Scanner(System.in);
    
            int time = in.nextInt();
    
            System.out.println(militaryToOrdinaryTime(time));
        }
    }
    
    public静态字符串militaryToOrdinaryTime(int milTime)
    {
    整小时=milTime/100;
    int min=milTime%100;
    串周期;
    如果(小时<0 |小时>24 |分钟<0 |分钟>59)
    {
    返回“”;
    }
    否则,如果(小时>12)
    {
    小时=小时-12;
    period=“pm”;
    }
    其他的
    {
    period=“am”;
    }
    如果(小时==0)
    {
    小时=12;
    }
    如果(最小==0),则为else
    {
    字符串ordTime=hour+“”+句点;
    返回时间;
    }  
    否则如果(最小值<10&&min>0)
    {
    String min1=String.valueOf(min);
    min1=“0”+min1;
    字符串ordTime=hour+“:“+min1+”+句点;
    返回时间;
    }
    字符串ordTime=hour+“:“+min+”+句点;
    返回时间;
    }
    公共静态void main(字符串[]args)
    {
    扫描仪输入=新扫描仪(系统输入);
    int time=in.nextInt();
    System.out.println(军事到目标时间(time));
    }
    }
    
    我就是这样做的

    这是我的代码:

    import java.util.Scanner;
    
    class test{
    int h,m,s;
    
    public static void main (String args[]){
        int hour,min,sec;
        String format;
        Scanner obj=new Scanner(System.in);
        hour=obj.nextInt();
        min=obj.nextInt();
        sec=obj.nextInt();
        format=obj.next();
        int h,m,s;
    
        h=((hour>=00&&hour<24)?hour:0);
        m=((min>=00&&min<60)?min:0);
        s=((sec>=00&&sec<60)?sec:0);
    
        if(format.equals("PM")){
            h= (h!=12? 12+h :h);
        }else if (h==12)h=0;
        System.out.print(h+":"+m+":"+s);
    
    }}
    
    import java.util.Scanner;
    课堂测试{
    int h,m,s;
    公共静态void main(字符串参数[]){
    整小时,分钟,秒;
    字符串格式;
    扫描器obj=新扫描器(System.in);
    小时=obj.nextInt();
    min=obj.nextInt();
    sec=obj.nextInt();
    format=obj.next();
    int h,m,s;
    h=((小时>=00&&hour=00&&min=00&§l;dr)
    24小时制“正常”
    没有“正常时间”和“军事时间”这两个词。地球上的大多数人都能熟练地使用12小时的临时时钟和24小时的重要时间,如火车时刻表。术语“军事时间”主要用于美国,奇怪的是,很少有人知道24小时的时间

    避免遗留日期时间类 避免麻烦的旧日期时间类,如
    java.util.date
    .Calendar
    。这些类现在已被这些类取代

    您有一个仅日期值和一天中的某个时间值,并且希望将它们组合在一起。因此,首先建立每个部分

    该类表示一个仅限日期的值,不含日期和时区。类似地,
    LocalTime
    类表示一天中不含日期和时区的时间

    LocalDate
    可以指定显式格式模式

    DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern( "mm/DD/uuuu" ).withLocale( Locale.US );
    LocalDate ld = LocalDate.parse( "11/12/2011" , dateFormatter );
    
    ld.toString():2011-01-12

    LocalTime
    在一天中的某个时候也要这样做

    DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern( "HHmm" );
    LocalTime lt = LocalTime.parse( "0200" , timeFormatter );
    
    lt.toString():02:00

    LocalDateTime
    将这两部分连接成一个整体

    LocalDateTime
    不代表实际时刻,即时间线上的一个点。如果没有UTC或时区的偏移,此对象就没有实际意义。新西兰奥克兰的凌晨2点比加尔各答的凌晨2点早几个小时,加尔各答的凌晨2点比法国巴黎的凌晨2点早几个小时,而魁北山的凌晨2点更晚欧共体约

    当您再次需要问题中要求的仅日期或仅时间值时,可以从
    LocalDateTime
    提取
    LocalDate
    LocalTime

    LocalDate ld = ldt.toLocalDate();
    LocalTime lt = ldt.toLocalTime();
    
    LocalDate ld = zdt.toLocalDate();
    LocalTime lt = zdt.toLocalTime();
    
    ZoneDateTime
    如果您知道此值的预期值,请应用
    ZoneOffset
    以获得
    OffsetDateTime
    。更好的是,如果知道,请使用
    ZonedId
    以获得

    zdt.toString():2011-01-12T02:00:00-05:00[美国/蒙特利尔]

    当您再次需要问题中要求的仅日期或仅时间值时,可以从
    ZoneDateTime
    提取
    LocalDate
    LocalTime

    LocalDate ld = ldt.toLocalDate();
    LocalTime lt = ldt.toLocalTime();
    
    LocalDate ld = zdt.toLocalDate();
    LocalTime lt = zdt.toLocalTime();
    
    转化 最好避免像瘟疫一样使用
    java.util.Date
    。但是如果您必须使用尚未更新为java.time类型的旧代码,您可以通过调用添加到旧类中的新方法来转换为java.time,或者从java.time转换为java.time。从
    ZonedDateTime
    可以提取
    java.time.Instant
    (UTC时间轴上的一个时刻)并在
    Date
    上将其馈送到静态方法

    java.util.Date utilDate = java.util.Date.from( zdt.toInstant() );
    
    有关更多转换信息,请参阅

    关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,如,&

    该项目现已启动,建议迁移到java.time

    要了解更多信息,请参阅.和搜索堆栈溢出以获取许多示例和说明

    大部分java.time功能都在中向后移植到java 6和7,并进一步适应于中(请参阅)


    该项目通过额外的类扩展了java.time。该项目是未来可能添加到java.time的一个试验场。您可以在这里找到一些有用的类,例如、、。

    @lacker在美国,24小时时间通常被称为“军事时间”
    LocalDate ld = zdt.toLocalDate();
    LocalTime lt = zdt.toLocalTime();
    
    java.util.Date utilDate = java.util.Date.from( zdt.toInstant() );