我有一个任务,我需要以编程方式将小时,分钟,子午线设置为Calendar对象,并且需要以hh:mm a格式显示时间。以下是我目前的代码。
Calendar calendar = (Calendar)dateNtime.clone();
calendar.set(Calendar.HOUR, 12);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.AM_PM, 1);
SimpleDateFormat dateFormat = new SimpleDateFormat("hh:mm a");
String str = dateFormat.format(calendar.getTimeInMillis());
其中dateNTime是我必须用于构建新日历对象的现有日历对象。
一切都很顺利,除了我设定12PM的情况。它始终格式化为hh:mm a,结果为12:00 AM,而应该是12:00 PM。
如果有任何人对Calendar对象有很好的体验并且已知问题,请提供帮助,如果有良好的教程链接,请提供给我。
答案 0 :(得分:5)
HOUR
字段为documented:
获取和设置的字段编号,表示上午或下午的小时。小时用于12小时制(0 - 11)。
因此,不应将其设置为12,而应将其设置为0。
就我个人而言,我只需设置HOUR_OF_DAY
字段,如果您想将其设为PM,则添加12小时 - 并且根本不设置AM_PM
字段。
答案 1 :(得分:1)
wanted_breed = ['アメリカンショートヘア','ブリティッシュショートヘア']
df['breed_pool'] = [x if x in wanted_breed else 'others' for x in df['breed']]
sns.set(font='Yu Gothic')
fig,ax=plt.subplots()
g=sns.lineplot(x = "price",
y = "Age",
hue = 'breed_pool',
units = 'breed',
estimator = None,
palette = 'Set2',
data = df,ax=ax)
g.legend(loc='center right', bbox_to_anchor=(1.6, 0.8), ncol=1)
plt.xticks(np.arange(0,500000,100000),rotation=90)
plt.show()
日期时间 API 及其格式化 API java.util
已过时且容易出错。建议完全停止使用它们并切换到 modern Date-Time API*。
使用现代 API SimpleDateFormat
的解决方案:
java.time
输出:
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
// Replace JVM's default timezone, ZoneId.systemDefault() with the applicable
// timezone e.g. ZoneId.of("America/New_York")
ZonedDateTime zdt = ZonedDateTime.now(ZoneId.systemDefault())
.withHour(12)
.withMinute(0);
System.out.println(zdt);
// Get and display just time in default format
LocalTime time = zdt.toLocalTime();
System.out.println(time);
// Display just time in a custom format
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("hh:mm a", Locale.ENGLISH);
// Alternatively, dtf.format(time);
String formatted = dtf.format(zdt);
System.out.println(formatted);
}
}
2021-06-06T12:00:15.855986+01:00[Europe/London]
12:00:15.855986
12:00 PM
类型转换为 Calendar
类型?java.time
Instant instant = calendar.toInstant();
// Replace JVM's default timezone, ZoneId.systemDefault() with the applicable
// timezone e.g. ZoneId.of("America/New_York")
ZonedDateTime zdt = instant.atZone(ZoneId.systemDefault());
类型的 Calendar
对象怎么办?出于任何原因,如果您需要将 java.time
的这个对象转换为 ZonedDateTime
的对象,您可以这样做:
java.util.Calendar
从 modern Date-Time API 中详细了解 Calendar calendar = Calendar.getInstance();
calendar.setTime(Date.from(zdt.toInstant()));
,Trail: Date Time*。
有时,评论会被删除,因此会在下面引用 Ole V.V. 的宝贵评论:
<块引用>要更准确地转换为 java.time
,您可以使用
Calendar
* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用 ThreeTen-Backport,它将大部分 java.time 功能向后移植到 Java 6 & 7. 如果您正在为 Android 项目工作并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaring 和 How to use ThreeTenABP in Android Project。