Java 打印世界时和标准时的时间和日期

Java 打印世界时和标准时的时间和日期,java,Java,编写一个Java应用程序,将用户输入转换为时间和日期类,但我不知道如何将用户输入转换为通用和标准时间。。。我花了好几个小时在网上冲浪和堆栈溢出,一直没有找到解决方案 我有小时、分钟、秒、年、月、日,都在单独的整数变量中,需要以通用时间和标准时间显示它们 感谢您查看…有两种解决方案: 首先,将所有输入放在字符串中并对其进行分析: String dateStr = "" //put your input in this string in some format/ example

编写一个Java应用程序,将用户输入转换为时间和日期类,但我不知道如何将用户输入转换为通用和标准时间。。。我花了好几个小时在网上冲浪和堆栈溢出,一直没有找到解决方案

我有小时、分钟、秒、年、月、日,都在单独的整数变量中,需要以通用时间和标准时间显示它们

感谢您查看…

有两种解决方案: 首先,将所有输入放在字符串中并对其进行分析:

String dateStr = ""
//put your input in this string in some format/ example:
//dateSttr = year + "." + month + "." + day + " " + hour + ":" + minute;
//It is better to use StringBuilder

DateFormat inputFormat = new SimpleDateFormat("yyyy.MM.dd hh:mm");
//note that hh is 12h-format and HH is 24h-format
DateFormat outputFormat1 = new SimpleDateFormat("your_outputFormat");
DateFormat outputFormat2 = new SimpleDateFormat("your_another_outputFormat");
Date date = inputFormat.parse(dateStr);
String o1, o2;
o1 = outputFormat1.format(date);
o2 = outputFormat2.format(date);
//o1 and o2 is your result.
有关如何设置格式的规则,请参见

第二种解决方案是获取新日期并设置参数:

Calendar cln = Calendar.getInstance().clear(); 
//by default you get a calendar with current system time

//now set the fields. for example, day:
cln.set(Calendar.YEAR, 2015);
cln.set(Calendar.MONTH, Calendar.FEBRUARY);
cln.set(Calendar.DAY_OF_MONTH, 17);
cln.set(Calendar.HOUR_OF_DAY, 18);//Calendar.HOUR for 12h-format
cln.set(Calendar.MINUTE, 27);
有关在中设置日历的详细信息,请参见 请注意,在第二种变体中,可能有一些字段未定义。

有两种解决方案: 首先,将所有输入放在字符串中并对其进行分析:

String dateStr = ""
//put your input in this string in some format/ example:
//dateSttr = year + "." + month + "." + day + " " + hour + ":" + minute;
//It is better to use StringBuilder

DateFormat inputFormat = new SimpleDateFormat("yyyy.MM.dd hh:mm");
//note that hh is 12h-format and HH is 24h-format
DateFormat outputFormat1 = new SimpleDateFormat("your_outputFormat");
DateFormat outputFormat2 = new SimpleDateFormat("your_another_outputFormat");
Date date = inputFormat.parse(dateStr);
String o1, o2;
o1 = outputFormat1.format(date);
o2 = outputFormat2.format(date);
//o1 and o2 is your result.
有关如何设置格式的规则,请参见

第二种解决方案是获取新日期并设置参数:

Calendar cln = Calendar.getInstance().clear(); 
//by default you get a calendar with current system time

//now set the fields. for example, day:
cln.set(Calendar.YEAR, 2015);
cln.set(Calendar.MONTH, Calendar.FEBRUARY);
cln.set(Calendar.DAY_OF_MONTH, 17);
cln.set(Calendar.HOUR_OF_DAY, 18);//Calendar.HOUR for 12h-format
cln.set(Calendar.MINUTE, 27);
有关在中设置日历的详细信息,请参见
注意,在第二个变量中,您可能有一些字段未定义。

如果@JonSkeet的假设和我的假设是正确的,那么您可以从UTC或本地时间开始。显示它只是格式化输出的问题

对于另一种类型的时间,你可以加上或减去小时数,你可以在网上找到。棘手的是,这可能会把你推到下一个日历日,或者把你拉回到上一个日历日。为了解决这个问题,我想你要么

  • 实现年、月、日、小时的加法器——或

  • 将这些值转换为十进制数(例如,Excel使用天,在我写这篇文章时,它是42328.08813),将该值移动适当的小时数,然后将其转换回


  • 如果@JonSkeet的假设和我的假设是正确的,那么您可以从UTC或当地时间开始。显示它只是格式化输出的问题

    对于另一种类型的时间,你可以加上或减去小时数,你可以在网上找到。棘手的是,这可能会把你推到下一个日历日,或者把你拉回到上一个日历日。为了解决这个问题,我想你要么

  • 实现年、月、日、小时的加法器——或

  • 将这些值转换为十进制数(例如,Excel使用天,在我写这篇文章时,它是42328.08813),将该值移动适当的小时数,然后将其转换回

  • java.time by是正确的,但已经过时了。此外,正如其他人提到的,我不知道你所说的“普遍和标准时间”是什么意思。但我会尽力让你走一段路

    从Java8开始,旧的Java.util.Date/.Calendar类已经被新的框架取代。新类的灵感来源于一个非常成功的框架,该框架旨在作为其继承者,在概念上类似,但经过了重新设计。定义为。由项目扩展。看

    ZonedDateTime
    类有一个工厂方法,它使用年、月等的数字

    另外,您必须指定一个。如果数字表示时间中的日期,请使用常量。对于其他时区,使用正确的时区名称指定
    ZoneId
    对象;切勿使用3-4个字母的代码,如
    EST
    IST
    ,因为它们既不标准也不独特

    ZoneId zoneId = ZoneId.of( "America/Montreal" );
    // ZoneId zoneId = ZoneOffset.UTC; // ZoneOffset is a subclass of ZoneId.
    ZonedDateTime zdt = ZonedDateTime.of( 2015 , 1 , 2 , 3 , 4 , 5 , 6 , zoneId );
    
    zdt:2015-01-02T03:04:05.00000000 6-05:00[美国/蒙特利尔]

    您可以转换为UTC或其他时区

    ZonedDateTime zdt_Kolkata = zdt.withZoneSameInstant ( ZoneId.of("Asia/Kolkata") );
    ZonedDateTime zdt_Utc = zdt.withZoneSameInstant ( ZoneOffset.UTC );
    
    加尔各答:2015-01-02T13:34:05.00000000 6+05:30[亚洲/加尔各答]

    世界时:2015-01-02T08:04:05.000000006Z

    如果使用尚未更新java.time的类,请转换为java.util.Date。首先提取一个对象,时间线上的一个时刻始终以UTC为单位

    java.util.Date date = java.util.Date.from ( zdt.toInstant () );
    
    java.time by是正确的,但已经过时了。此外,正如其他人提到的,我不知道你所说的“普遍和标准时间”是什么意思。但我会尽力让你走一段路

    从Java8开始,旧的Java.util.Date/.Calendar类已经被新的框架取代。新类的灵感来源于一个非常成功的框架,该框架旨在作为其继承者,在概念上类似,但经过了重新设计。定义为。由项目扩展。看

    ZonedDateTime
    类有一个工厂方法,它使用年、月等的数字

    另外,您必须指定一个。如果数字表示时间中的日期,请使用常量。对于其他时区,使用正确的时区名称指定
    ZoneId
    对象;切勿使用3-4个字母的代码,如
    EST
    IST
    ,因为它们既不标准也不独特

    ZoneId zoneId = ZoneId.of( "America/Montreal" );
    // ZoneId zoneId = ZoneOffset.UTC; // ZoneOffset is a subclass of ZoneId.
    ZonedDateTime zdt = ZonedDateTime.of( 2015 , 1 , 2 , 3 , 4 , 5 , 6 , zoneId );
    
    zdt:2015-01-02T03:04:05.00000000 6-05:00[美国/蒙特利尔]

    您可以转换为UTC或其他时区

    ZonedDateTime zdt_Kolkata = zdt.withZoneSameInstant ( ZoneId.of("Asia/Kolkata") );
    ZonedDateTime zdt_Utc = zdt.withZoneSameInstant ( ZoneOffset.UTC );
    
    加尔各答:2015-01-02T13:34:05.00000000 6+05:30[亚洲/加尔各答]

    世界时:2015-01-02T08:04:05.000000006Z

    如果使用尚未更新java.time的类,请转换为java.util.Date。首先提取一个对象,时间线上的一个时刻始终以UTC为单位

    java.util.Date date = java.util.Date.from ( zdt.toInstant () );
    

    你的变量中有哪一个?UTC还是当地时间?你说的“标准时间”到底是什么意思?我猜你指的是某个特定时区的“当地时间”——哪个时区?你的时/分/秒/年/月/日是用来表示开始的世界时间还是本地时间?你的变量中有哪一个?UTC还是当地时间?你说的“标准时间”到底是什么意思?我猜你指的是某个特定时区的“当地时间”——哪个时区?您的时/分/秒/年/月/日是用来表示开始的通用时间还是本地时间?谢谢,我能够使用您的部分代码构建解决方案谢谢,我能够使用您的部分代码构建解决方案谢谢您花时间回答,你的建议帮助我找到了答案。谢谢你花时间回答