gpt4 book ai didi

java - 如何更正 EST 格式的日期?

转载 作者:行者123 更新时间:2023-12-01 19:00:56 26 4
gpt4 key购买 nike

在我的基于 struts 的 Web 应用程序中,我正在获取有关调度程序下一次运行的数据。然后我将其传递给一个将设置发票日期的方法。实际情况是,我们需要管理整个月的交易。当月结束后,相应的发票将在下个月的 1 号生成。例如,如果所有交易都发生在 2020 年 1 月,则发票日期应为 2020 年 2 月 1 日。

但是现有的方法似乎有问题。它向最终用户显示日期

我们将于美国东部时间 2022 年 7 月 1 日凌晨 12:00 开具发票

应该是

我们将于美国东部时间 2020 年 2 月 1 日凌晨 12:00 开具发票

片段:

List<ScheduleTaskInfo> sInfo = sManagement
.getSchedulerTaskList(SchedulerTask.BillingViewTask,
cProduct.getAccountId(), cProduct.getId(),
cProduct.getRunningId());

if (sInfo != null && sInfo.size() > 0) {
ScheduleTaskInfo info = sInfo.get(0);
try {
setInvoiceDate(dateUtil.getFormattedTime(
info.getNextRun(), "MM-dd-yyyy H:mm"));
} catch (Exception e) {
logger.error(e.getMessage(), e);
}

}

实用方法

public  String getFormattedTime(String dateString, String format)
throws ParseException {
String result = null;
try {
format = getDateFormat(format);
result = getESTTime(getStringToUtilDate(dateString, format));
} catch (Exception e) {
e.printStackTrace();
}
return result;

}

getStringToUtilDate

public  java.util.Date getStringToUtilDate(String dateString,
String format) throws ParseException {
SimpleDateFormat sd = null;
try {
format = getDateFormat(format);
sd = new SimpleDateFormat(format);
sd.setTimeZone(TimeZone.getTimeZone("EST"));
} catch (Exception e) {
e.printStackTrace();
}
return sd.parse(dateString);
}

负责生成 EST 格式的代码如下

下面的代码片段返回的日期为美国东部时间 2022 年 7 月 1 日凌晨 12:00

public  String getESTTime(java.util.Date date) {
String strDate = null;
try {
SimpleDateFormat dateFormat = new SimpleDateFormat("dd MMMM yyyy h:mm aa zzz");
dateFormat.setTimeZone(TimeZone.getTimeZone("EST"));
strDate = dateFormat.format(date);
} catch (Exception e) {
e.printStackTrace();
}
return strDate;
}

我该如何纠正这个问题?

最佳答案

更喜欢使用 Java 8 LocalDateTime api 而不是旧的 Java 实用程序日期。它更干净。

LocalDateTime nextRunDate = LocalDateTime.parse("2022-01-01 00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"));

/*Custom Date Manipulation Logic*/
LocalDateTime expectedInvoiceDate=nextRunDate.plusMonths(1);

String invoiceDate = DateTimeFormatter.ofPattern("dd MMMM yyyy hh:mm a z")
.format(
expectedInvoiceDate.atZone(ZoneId.of("America/New_York"))
);

System.out.println(invoiceDate);

根据您的需要选择时区。

https://howtodoinjava.com/java/date-time/convert-date-time-to-est-est5edt/

关于java - 如何更正 EST 格式的日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59641268/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com