Android日历设置上午或下午时间而不是24小时制

7

我目前有一个脚本,总是以AM PM格式传递时间。但是,我不知道如何使用此时间设置日历,因为它只接受24小时格式,而我编写的代码只支持12小时制。我该如何将时间转换为24小时制或输入12小时制?

         calendar.set(Calendar.HOUR_OF_DAY, HourValue);
         calendar.set(Calendar.MINUTE, MinuteValue);
         calendar.set(Calendar.SECOND, 0);
         calendar.add(Calendar.MINUTE, -356);
5个回答

14

谢谢,那你如何定义上午或下午呢? - Somk
5
这段内容的意思是设置日历的上午/下午时间,如果小时值小于12,则设置为上午,否则设置为下午。 - ErikR
这个答案救了我的一天 :) - Prasanna Narshim

7

0代表上午,1代表下午。

Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR, 年份); c.set(Calendar.MONTH, 月份); c.set(Calendar.DAY_OF_MONTH, 日); c.set(Calendar.AM_PM, 1); c.set(Calendar.HOUR, 小时); c.set(Calendar.MINUTE, 分钟); c.set(Calendar.SECOND, 00); c.set(Calendar.MILLISECOND, 00); 注意:请将年份、月份、日、小时和分钟替换为具体的数字。

2
与其使用0或1,最好使用Calendar.AMCalendar.PM - Hasan Abdullah

1
int am_pm=c.get(Calendar.AM_PM);
String time=c.HOUR + ((am_pm==Calendar.AM)?"am":"pm"))

你可以尝试上述内容。

0

简而言之

ZonedDateTime.of( 
    LocalDate.now( ZoneId.of( "Pacific/Auckland" ) )  // Determine today’s date for a given region.
        .plusDays( 1 ) ,                              // Determine day-after, tomorrow.
    LocalTime.parse(                                  // Parse string with AM/PM into `LocalTime` object.
        "6:51:35 PM" , 
        DateTimeFormatter.ofPattern( "h:m:s a" ).withLocale( Locale.US ) 
    ) ,                                               // Combine date with time-of-day…
    ZoneId.of( "Pacific/Auckland" )                   // …and zone…
)                                                     // …to produce a `ZonedDateTime`, a point on the timeline.
.toString()                                           // Generate a String in standard ISO 8601 format, wisely extended by appending the name of the time zone in square brackets.

2018年02月02日18:51:35 +13:00 [太平洋/奥克兰]

java.time

将传入的字符串按12小时制解析为LocalTime对象。
String input = "6:51:35 PM" ; 
DateTimeFormatter f = DateTimeFormatter.ofPattern( "h:m:s a" ).withLocale( Locale.US ) ;

LocalTime lt = LocalTime.parse( input , f ) ;

要设置闹钟,您需要将日期与这个时间结合起来,并加上时区以确定实际时间。

LocalDate类表示仅具有日期值而没有时间和时区的值。

时区在确定日期方面非常重要。对于任何给定的时刻,日期因时区而异。例如,在法国巴黎午夜后几分钟是新的一天,而在魁北克蒙特利尔仍然是“昨天”。

如果未指定时区,则JVM隐式地应用其当前默认时区。该默认值可能随时更改,因此您的结果可能会有所不同。最好将所需/预期的时区明确指定为参数。

请以大陆/地区的格式指定一个正确的时区名称,例如 {{link2:America/Montreal}}、{{link3:Africa/Casablanca}} 或 Pacific/Auckland。绝不要使用三到四个字母缩写,如ESTIST,因为它们不是真正的时区,没有标准化,并且甚至不是唯一的!

ZoneId z = ZoneId.of( "America/Montreal" ) ;  
LocalDate today = LocalDate.now( z ) ;

如果您想使用JVM的当前默认时区,请请求并将其作为参数传递。如果省略,则隐式应用JVM的当前默认值。最好明确指出。

ZoneId z = ZoneId.systemDefault() ;  // Get JVM’s current default time zone.

通过增加一天来确定明天。

LocalDate tomorrow = today.plusDays( 1 ) ;

应用当天时间和所需时区来生成一个ZonedDateTime。如果由于夏令时(DST)等异常情况,您的当天时间在该时区中对于该日期无效,则该类会自动进行调整。请阅读文档以确保您理解并同意这些调整的行为。
ZonedDateTime zdt = ZonedDateTime.of( tomorrow , lt , z ) ; // Get a specific moment in time given a particular date, time-of-day, and zone.

关于 java.time

java.time 框架是内置于 Java 8 及更高版本中的。这些类取代了令人头疼的老式遗留日期时间类,如 java.util.DateCalendarSimpleDateFormat

Joda-Time 项目现在处于维护模式,建议迁移到 java.time 类。

欲了解更多信息,请参阅 Oracle 教程。并在 Stack Overflow 上搜索许多示例和解释。规范为 JSR 310

如何获取 java.time 类?


0
使用以下关键词设置上午/下午

Calendar.AM

Calendar.PM

val startDate = Calendar.getInstance().apply {
                timeInMillis = System.currentTimeMillis()
                set(HOUR_OF_DAY, Calendar.AM) // Calendar.PM
                set(Calendar.HOUR, 9)
                set(Calendar.MINUTE, 0)
                set(Calendar.SECOND, 0)
            }.timeInMillis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接