Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SimpleDateFormat年份和时区格式是否有问题_Java_Simpledateformat - Fatal编程技术网

Java SimpleDateFormat年份和时区格式是否有问题

Java SimpleDateFormat年份和时区格式是否有问题,java,simpledateformat,Java,Simpledateformat,我对这个烦人的问题束手无策。很长一段时间内基本上无法解决这个问题 java.util.Calendar calendar_now = java.util.Calendar.getInstance(); java.util.Calendar calendar_entry = java.util.Calendar.getInstance(); java.util.Date dt = new Date(); java.text.SimpleDateFormat

我对这个烦人的问题束手无策。很长一段时间内基本上无法解决这个问题

     java.util.Calendar calendar_now = java.util.Calendar.getInstance();
     java.util.Calendar calendar_entry = java.util.Calendar.getInstance();
     java.util.Date dt = new Date();
     java.text.SimpleDateFormat formatter;
  try{
     // if(this.Time.length() == 0) {this.Time = "00:00";}
     //this.Time = "00:00";
     // System.out.println("*" + this.Time + "*");
     if((this.Time.substring(this.Time.length() - 2) == "am")||(this.Time.substring(this.Time.length() - 2) == "pm"))
     {
      formatter = new SimpleDateFormat("yyyy E MMM d H:mmaa z",Locale.US);
       dt = (Date)formatter.parse(calendar_now.get(java.util.Calendar.YEAR) + " " + this.Date + " " + this.Time + " EST");
      //calendar_entry.setTimeZone(java.util.TimeZone.getTimeZone("America/New_York"));
     }
      calendar_entry.setTime(dt);
      if (calendar_entry.get(java.util.Calendar.MONTH) < calendar_now.get(java.util.Calendar.MONTH)){
       calendar_entry.set(java.util.Calendar.YEAR,calendar_now.get(java.util.Calendar.YEAR) + 1);
      }
    else{
       calendar_entry.set(java.util.Calendar.YEAR,calendar_now.get(java.util.Calendar.YEAR));
    }
//    calendar_entry.setTimeZone(java.util.TimeZone.getTimeZone("GMT"));
      System.out.println(calendar_now.get(java.util.Calendar.YEAR) + " " + this.Date + " " + this.Time + " EST");
      System.out.println(dt.toString());
      System.out.println(calendar_entry);
java.util.Calendar\u now=java.util.Calendar.getInstance();
java.util.Calendar\u entry=java.util.Calendar.getInstance();
java.util.Date dt=新日期();
java.text.SimpleDataFormat格式化程序;
试一试{
//如果(this.Time.length()==0){this.Time=“00:00”;}
//this.Time=“00:00”;
//System.out.println(“*”+this.Time+“*”);
if((this.Time.substring(this.Time.length()-2)=“am”)| |(this.Time.substring(this.Time.length()-2)=“pm”))
{
格式化程序=新的SimpleDataFormat(“yyyy E MMM d H:mmaa z”,Locale.US);
dt=(Date)formatter.parse(calendar_now.get(java.util.calendar.YEAR)+“”+this.Date+“”+this.Time+“EST”);
//calendar_entry.setTimeZone(java.util.TimeZone.getTimeZone(“美国/纽约”));
}
日历条目的设置时间(dt);
if(calendar\u entry.get(java.util.calendar.MONTH)
这将产生:

2010 Fri Oct 1 10:00am EST Thu Oct 01 10:00:00 SGT 1970 java.util.GregorianCalendar[time=?,areFieldsSet=false,areAllFieldsSet=true,lenient=true,zone=sun.uti l.calendar.ZoneInfo[id="GMT",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],fi rstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2010,MONTH=9,WEEK_OF_YEAR=40,WEEK_OF_MONTH=1,DAY_ OF_MONTH=1,DAY_OF_YEAR=274,DAY_OF_WEEK=5,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=2,HOUR_OF_DAY=2,MINUTE= 30,SECOND=0,MILLISECOND=0,ZONE_OFFSET=0,DST_OFFSET=0] 2010年10月1日星期五美国东部时间上午10:00 1970年10月1日星期四10:00:00中士 java.util.GregorianCalendar[time=?,areFieldsSet=false,areAllFieldsSet=true,lenient=true,zone=sun.uti l、 calendar.ZoneInfo[id=“GMT”,偏移量=0,DSTSAVIES=0,useDaylight=false,转换=0,lastRule=null],fi rstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2010,MONTH=9,YEAR=40,WEEK=1,DAY=1,YEAR=2010_ 月的天数=1,年的天数=274,周的天数=5,周的天数=1,上午下午=0,小时=2,日的小时=2,分钟= 30,秒=0,毫秒=0,分区_偏移=0,DST_偏移=0]
问题是……为什么?

我不知道您有什么,也不知道您希望得到什么,但我看到代码中至少有一个重大错误。在这一行中

if((this.Time.substring(this.Time.length() - 2) == "am")||(this.Time.substring(this.Time.length() - 2) == "pm"))
您是通过引用而不是通过值来比较
String
字符串
就是一个对象,而不是像
int
boolean
等那样的原语,
=
将按照预期和预期工作

if((this.Time.substring(this.Time.length() - 2).equals("am"))||(this.Time.substring(this.Time.length() - 2).equals("pm")))
但是,我建议改为使用该方法。这不仅更加简洁,而且使代码更加自我解释:

if (this.Time.endsWith("am") || this.Time.endsWith("pm")) 

话虽如此,毫无疑问,对于您想要实现的任何目标,都有一种更优雅的方式,但由于功能需求不明确,因此不可能给您一个这样的开始示例。

浏览代码时,下面的代码行(您希望格式化)似乎从未执行过

 formatter = new SimpleDateFormat("yyyy E MMM d H:mmaa z",Locale.US);
 dt = (Date)formatter.parse(calendar_now.get(java.util.Calendar.YEAR) + " " + this.Date + " " + this.Time + " EST");
正如BalusC正确指出的,这是由于字符串comaprison的条件语句无效。也就是说,您使用的是“==”而不是“.equals”方法。您的问题可以通过使用以下方法更正,正如BalusC所建议的:

if (this.Time.endsWith("am") || this.Time.endsWith("pm")) 
而不是:

if((this.Time.substring(this.Time.length() - 2) == "am")||(this.Time.substring(this.Time.length() - 2) == "pm"))

问题是-出了什么问题?我敢打赌,如果你指出了什么问题以及原因,你会得到更好的回答。不要让人们通读那些混乱的东西来找出困扰你的原因。好吧,现在代码看起来确实更漂亮了。也许我应该问一个更具体的问题。为什么日期对象中没有修改年份和时区不只是像原来的字符串???应该是2010年EST,而不是1970年SGT?这就是我的回答。你在“dt”对象中设置日期、时间和时区,条件块从不执行。不要使用“=”进行字符串比较,条件总是假的,因为“=”在您的情况下使用。请尝试我的答案中建议的条件,它应该会像您期望的那样工作。非常感谢它现在可以工作。我们将尝试并找出为什么只有时间/日期可以工作。好的,现在代码看起来确实更漂亮。也许我应该问一个更具体的问题。为什么日期对象中没有修改年份和时区就像原来的字符串一样???应该是2010年EST,而不是1970年SGT?因为从来没有输入过
if
块。非常感谢,现在它可以工作了。我们来看看为什么只有时间/日期可以工作。你只能在拥有至少15个声誉的情况下投票。不过,你可以标记cl接受的最有用的答案勾选复选标记。