C 实现秒转化为年月日时分秒
时间: 2024-05-13 17:16:54 浏览: 48
以下是将秒转化为年月日时分秒的 C 代码实现:
```c
#include<stdio.h>
int main()
{
long long int sec, minutes, hours, days, years;
int rem_sec, rem_min, rem_hour, rem_day;
printf("请输入秒数:");
scanf("%lld", &sec);
rem_sec = sec % 60;
minutes = sec / 60;
rem_min = minutes % 60;
hours = minutes / 60;
rem_hour = hours % 24;
days = hours / 24;
rem_day = days % 365;
years = days / 365;
printf("%lld 秒 = %lld 年, %d 天, %d 时, %d 分, %d 秒\n", years, rem_day, rem_hour, rem_min, rem_sec);
return 0;
}
```
代码中使用 long long int 类型来存储秒数,以避免在计算过程中发生溢出,同时也使用了 int 类型来存储余数。通过将秒数依次转化为分钟、小时、天数和年份,然后对余数进行计算,最终得到对应的年、日、时、分和秒。
相关问题
帮我写一个把错误时间格式转化为正确时间格式的c语言程序
当然可以,以下是一个简单的C语言程序,可以将错误的时间格式转换为正确的时间格式:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char input[20];
printf("请输入错误的时间格式(例如:2021-13-32 25:61:61):");
scanf("%s", input);
// 分离年月日和时分秒
char year[5], month[3], day[3], hour[3], minute[3], second[3];
strncpy(year, input, 4);
year[4] = '\0';
strncpy(month, input+5, 2);
month[2] = '\0';
strncpy(day, input+8, 2);
day[2] = '\0';
strncpy(hour, input+11, 2);
hour[2] = '\0';
strncpy(minute, input+14, 2);
minute[2] = '\0';
strncpy(second, input+17, 2);
second[2] = '\0';
// 将字符串转换为整数
int y = atoi(year);
int m = atoi(month);
int d = atoi(day);
int h = atoi(hour);
int min = atoi(minute);
int sec = atoi(second);
// 判断是否合法
if (m < 1 || m > 12 || d < 1 || d > 31 || h < 0 || h > 23 || min < 0 || min > 59 || sec < 0 || sec > 59) {
printf("非法的时间格式!\n");
return 0;
}
// 判断是否闰年
int leap = 0;
if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0) {
leap = 1;
}
// 判断每个月的天数
int days[13] = {0, 31, 28+leap, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (d > days[m]) {
printf("非法的时间格式!\n");
return 0;
}
// 输出正确的时间格式
printf("正确的时间格式为:%04d-%02d-%02d %02d:%02d:%02d\n", y, m, d, h, min, sec);
return 0;
}
```
输入错误的时间格式,程序会自动将其转换为正确的时间格式并输出。
北斗整周数,周内秒,约化儒略日,UTC,互相转化用结构体C++,.h.cpp
以下是一个简单的示例代码,用于将北斗整周数、周内秒转换为约化儒略日和UTC时间,并且可以进行相应的互相转化。需要注意的是,这里只考虑了不考虑闰秒的情况。
```c++
#include <iostream>
#include <cmath>
using namespace std;
// 定义结构体
struct Time {
int year;
int month;
int day;
int hour;
int minute;
double second;
};
// 声明函数
double getJulianDay(int year, int month, int day, int hour, int minute, double second);
Time getUTCFromJD(double jd);
double getJDFromUTC(Time utc);
double getJDFromBD(int week, double seconds);
Time getUTCFromBD(int week, double seconds);
int main() {
// 示例代码
int week = 2125;
double seconds = 234567.89;
double jd = getJDFromBD(week, seconds);
Time utc = getUTCFromBD(week, seconds);
cout << "北斗整周数:" << week << endl;
cout << "周内秒数:" << seconds << endl;
cout << "约化儒略日:" << jd << endl;
cout << "UTC时间:" << utc.year << "-" << utc.month << "-" << utc.day << " " << utc.hour << ":" << utc.minute << ":" << utc.second << endl;
return 0;
}
// 计算儒略日
double getJulianDay(int year, int month, int day, int hour, int minute, double second) {
// 由于儒略日是从 4713 年 1 月 1 日 12 时开始计算的,因此需要先将时间转换为以 4713 年为基准的年月日时分秒
int Y = year;
int M = month;
if (M <= 2) {
Y--;
M += 12;
}
int D = day;
double H = hour + minute / 60.0 + second / 3600.0;
double JD = floor(365.25 * Y) + floor(Y / 400.0) - floor(Y / 100.0) + floor(30.59 * (M - 2)) + D + 1721088.5 + H / 24.0;
return JD;
}
// 将儒略日转换为UTC时间
Time getUTCFromJD(double jd) {
double JD = jd + 0.5;
int Z = floor(JD);
double F = JD - Z;
int A, B, C, D, E, day, month, year, hour, minute;
if (Z < 2299161) {
A = Z;
} else {
int alpha = floor((Z - 1867216.25) / 36524.25);
A = Z + 1 + alpha - floor(alpha / 4.0);
}
B = A + 1524;
C = floor((B - 122.1) / 365.25);
D = floor(365.25 * C);
E = floor((B - D) / 30.6001);
day = B - D - floor(30.6001 * E) + F;
if (E < 14) {
month = E - 1;
} else {
month = E - 13;
}
if (month > 2) {
year = C - 4716;
} else {
year = C - 4715;
}
double H = (F - floor(F)) * 24.0;
hour = static_cast<int>(H);
double M = (H - hour) * 60.0;
minute = static_cast<int>(M);
double S = (M - minute) * 60.0;
Time utc = {year, month, day, hour, minute, S};
return utc;
}
// 将UTC时间转换为儒略日
double getJDFromUTC(Time utc) {
double Y = utc.year;
double M = utc.month;
double D = utc.day;
double H = utc.hour + utc.minute / 60.0 + utc.second / 3600.0;
double JD = 367 * Y - floor(7 * (Y + floor((M + 9) / 12.0)) / 4.0) + floor(275 * M / 9.0) + D + 1721013.5 + H / 24.0;
return JD;
}
// 将北斗整周数和周内秒数转换为儒略日
double getJDFromBD(int week, double seconds) {
double JD = 2444244.5 + week * 7.0 + seconds / 86400.0;
return JD;
}
// 将儒略日转换为北斗整周数和周内秒数
Time getUTCFromBD(int week, double seconds) {
double JD = getJDFromBD(week, seconds);
Time utc = getUTCFromJD(JD);
return utc;
}
```
其中,`getJulianDay()` 函数用于计算儒略日,`getUTCFromJD()` 函数用于将儒略日转换为UTC时间,`getJDFromUTC()` 函数用于将UTC时间转换为儒略日,`getJDFromBD()` 函数用于将北斗整周数和周内秒数转换为儒略日,`getUTCFromBD()` 函数用于将儒略日转换为北斗整周数和周内秒数。
需要注意的是,上述代码只考虑了不考虑闰秒的情况。如果需要考虑闰秒,还需要进行相应的调整。
阅读全文