有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在java中仅从new Date()获取时区字段

要求:我只想从新日期()中获取时区字段,从现在的新日期()中,我得到的结果如下

Wed Jul 23 19:37:20 GMT+05:30 2014,但我只想要GMT+05:30,有没有办法只得到这个

注:我不想使用分割来获取时区字段。因为这是我实现上述要求的最终选择


共 (4) 个答案

  1. # 1 楼答案

    导入java。util包并使用GregoriaCalendar方法

    int second, minute, hour;
    GregorianCalendar date = new GregorianCalendar();
    
    second = date.get(Calendar.SECOND);
    minute = date.get(Calendar.MINUTE);
    hour = date.get(Calendar.HOUR);
    
    System.out.println("Current time is  "+hour+" : "+minute+" : "+second);
    

    不要使用java的日期和时间类。util包,因为它们的方法已被弃用,这意味着未来版本的JDK可能不支持它们

  2. # 2 楼答案

    假设您必须使用String输入,您可以执行以下操作:

    // format : dow mon dd hh:mm:ss zzz yyyy
    String date = "Wed Jul 23 19:37:20 GMT+05:30 2014";
    Pattern pattern = Pattern
        .compile("^\\w{3}\\s\\w{3}\\s\\d{2}\\s\\d{2}:\\d{2}:\\d{2}\\s?(.*)\\s\\d{4}$");
    Matcher matcher = pattern.matcher(date);
    if (matcher.matches()) {
      String timezone = matcher.group(1);
      // beware : according to the Date.toString() documentation the timezone
      // value can be empty
      System.out.println(timezone);
    } else {
      System.out.println("doesn't match!");
    }
    
  3. # 3 楼答案

    您应该使用Calendar类,可能还应该使用GregorianCalendar实现。许多Date函数被弃用,转而使用Calendar。Java8有ClockAPI,但我在这里假设Java7

    这样你就可以做到:

    Calendar calendar = new GregorianCalendar();
    TimeZone tz = calendar.getTimeZone();
    

    从那里开始工作

  4. # 4 楼答案

    生成带有偏移量但没有日期和时间的字符串

    你的问题不准确。爪哇。util。日期没有时区(假定始终为UTC)。JVM的时区应用于对象toString方法和其他生成字符串表示的格式化代码中。这就是你的解决方案:使用一个日期时间格式化程序,它生成一个字符串,只包含与UTC的偏移量,而不包含日期或时间部分

    避免java.util.Date&.Calendar

    避免使用捆绑的java。util。日期和日期。日历类是出了名的麻烦。而是使用Joda Time或新的java。时间包。两者都支持时区作为日期时间对象的一部分

    乔达时间

    下面是如何在Joda Time 2.3中生成日期时间的字符串表示

    DateTime dateTime = new DateTime( DateTimeZone.forID( "Asia/Kolkata" ) );
    DateTimeFormatter formatter = DateTimeFormat.forPattern( "ZZ" );
    String offset = formatter.print( dateTime );  // generates: +05:30
    

    在Joda Time 2.3中,您可以要求DateTime对象将其指定的时区作为对象。然后可以询问DateTimeZone对象

    DateTime dateTime = new DateTime( DateTimeZone.forID( "Asia/Kolkata" ) );
    DateTimeZone timeZone = dateTime.getZone();
    String id = timeZone.getID();