
// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-

#ifndef __java_util_Date__
#define __java_util_Date__

#pragma interface

#include <java/lang/Object.h>
#include <gcj/array.h>


class java::util::Date : public ::java::lang::Object
{

public:
  Date();
  Date(jlong);
  Date(jint, jint, jint);
  Date(jint, jint, jint, jint, jint);
  Date(jint, jint, jint, jint, jint, jint);
  Date(::java::lang::String *);
  virtual ::java::lang::Object * clone();
  static jlong UTC(jint, jint, jint, jint, jint, jint);
  virtual jlong getTime();
  virtual jint getTimezoneOffset();
  virtual void setTime(jlong);
  virtual jboolean after(::java::util::Date *);
  virtual jboolean before(::java::util::Date *);
  virtual jboolean equals(::java::lang::Object *);
  virtual jint Date$compareTo(::java::util::Date *);
  virtual jint hashCode();
  virtual ::java::lang::String * toString();
  virtual ::java::lang::String * toLocaleString();
  virtual ::java::lang::String * toGMTString();
private:
  static jint parseTz(::java::lang::String *, jchar);
  static jint parseMonth(::java::lang::String *);
  static jboolean parseDayOfWeek(::java::lang::String *);
public:
  static jlong parse(::java::lang::String *);
  virtual jint getYear();
  virtual void setYear(jint);
  virtual jint getMonth();
  virtual void setMonth(jint);
  virtual jint getDate();
  virtual void setDate(jint);
  virtual jint getDay();
  virtual jint getHours();
  virtual void setHours(jint);
  virtual jint getMinutes();
  virtual void setMinutes(jint);
  virtual jint getSeconds();
  virtual void setSeconds(jint);
private:
  void readObject(::java::io::ObjectInputStream *);
  void writeObject(::java::io::ObjectOutputStream *);
public:
  virtual jint compareTo(::java::lang::Object *);
private:
  static const jlong serialVersionUID = 7523967970034938905LL;
  jlong __attribute__((aligned(__alignof__( ::java::lang::Object)))) time;
  static JArray< ::java::lang::String * > * weekNames;
  static JArray< ::java::lang::String * > * monthNames;
public:
  static ::java::lang::Class class$;
};

#endif // __java_util_Date__
