5

好吧,在我的应用程序中,我想获取当前日期和月份以及本地时间(currentTimeZone 小时),并根据其值显示一些内容。

我已经阅读了几个解决方案,并且我使用了以下内容:

Calendar c = Calendar.getInstance(); 
            int day=c.get(Calendar.DATE);
            int month=c.get(Calendar.MONTH);

或这个

Time today = new Time(Time.getCurrentTimezone());
            today.setToNow();
            int day2=today.monthDay;
            int month2=today.month;

我的问题是:

1)考虑到他们的结果,哪一个更“稳定”?我的意思是它不会有任何问题。

2)此外,他们是否都考虑了时区?我认为第二个可以,但是日历呢?

3)我尝试了我发现的这段代码:

SimpleDateFormat s = new SimpleDateFormat("ddMMyyyyhhmmss");
            String format = s.format(new Date());

我得到 Date() 必须有参数的错误。很奇怪,因为在每个答案中他们都这样使用它。

怎么了?

4)你建议我用什么?我唯一想要的是当前月份、日期、小时与一些存储在内存中的简单比较。(例如,如果是 1 月 29 日,则显示该事件。如果是上午 19 点,则发送通知等。)

4

4 回答 4

14

1)考虑到他们的结果,哪一个更“稳定”?我的意思是它不会有任何问题

它们既稳定又经过很好的测试,尤其Calendar是从 JDK1.1 开始就在 Java API 中。同样来自以下文档Time

Calendar 和 GregorianCalendar 类的替代方案。Time 类的一个实例表示时间中的一个时刻,以秒精度指定。它是仿照 struct tm 建模的,实际上是使用 struct tm 来实现大部分功能。

Time,恕我直言,工作起来要容易得多Calendar

2)此外,他们是否都考虑了时区?我认为第二个可以,但是日历呢?

是的,他们有。您可以指定一个TimeZoneusing Calendar.getInstance(java.util.TimeZone)。否则,将使用默认值。

3)我尝试了我发现的这段代码:

代码工作得很好。例如,确保您使用的是new java.util.Date()代替java.sql.Date

4)你建议我用什么?我唯一想要的是当前月份、日期、小时与一些存储在内存中的简单比较。(例如,如果是 1 月 29 日,则显示该事件。如果是上午 19 点,则发送通知等。)

这真的是个人选择的问题。Calendar例如,使用来比较今天是否是 1 月 29 日,您可以简单地使用以下命令:

Calendar today = Calendar.getInstance();
int dayOfMonth = today.get(Calendar.DAY_OF_MONTH);
int month = today.get(Calendar.MONTH);
if (month == Calendar.JANUARY && dayOfMonth == 29) {
  // January 29
}
于 2012-09-08T22:40:04.040 回答
1

在我的 Android 应用程序中,我将日期保存在 SQLite 中。但是,SQLite 不接受 Date 数据类型。所以我像这样将它转换为 String 以便使用格式YYYY-MM-DD

            Time today = new Time(Time.getCurrentTimezone());
            today.setToNow();
            int year = today.year;
            int month = today.month;
            int day = today.monthDay;

            Calendar gregorianCalendar = new GregorianCalendar(year, month, day);
            String entryDate =  gregorianCalendar.get(Calendar.YEAR) + "-" + gregorianCalendar.get(Calendar.MONTH) + "-" + gregorianCalendar.get(Calendar.DAY_OF_MONTH);

而且效果很好。我不关心性能差异,因为它们很可能是疏忽大意的。

于 2013-07-17T18:18:01.347 回答
1
于 2018-02-06T02:51:54.620 回答
0

android.text.format.Time 在 API 级别 22 中已弃用。请改用 GregorianCalendar。

访问http://developer.android.com/reference/android/text/format/Time.html

据我所知,Time 类中存在一些问题,例如当参数小于 1970.1.1 的 julianDay 时,Time.setJulianDay(int julianDay) 会返回错误值

并且在 1987-1991 年 4 月之间也发生了一些错误(可能是 Time.set(long millis),我不记得了)。

于 2015-03-21T15:17:35.480 回答